기초

[Java]ArrayList와 LinkedList(+Vector)

  • -
반응형

자바에서는 리스트 인터페이스로 Linkedlist(연결리스트), ArrayList(배열리스트), Vector를 제공한다.

 

Vector

Java 1.0부터 이어져온 리스트 객체로 배열 형태를 이룬다.

데이터 추가시 공간을 두 배로 확보하기 때문에 메모리를 많이 잡아먹는다.

동기화가 항상 이루어지기 때문에 하나의 스레드가 하나의 자원을 이용하는 경우 성능이 저하된다.

※스레드(Thread) : 여러가지 작업을 동시에 수행하는 것


ArrayList

ArrayList는 이름 그대로 데이터를 배열(Array) 구조로 가지고 있는 객체이다. 

아래 그림과 같이 내부적으로 인덱스를 가지고 있어 검색이 용이하다.

데이터의 추가 또는 수정, 삭제 시 내부적으로 임시 공간을 만들어 데이터를 저장한다. 때문에 대량의 데이터를 추가 또는 수정, 삭제할 때 성능이 저하된다.





LinkedList

노드간에 연결을 통해 리스트로 구현된 객체이다. 노드는 내부적으로 데이터 필드와 다음 노드를 가리키는 주소 필드를 가지고 있다.

노드의 주소 필드로 이어져 있는 구조여서 데이터의 검색은 순차적으로 일어난다. 때문에 인덱스를 이용해 검색하는 ArrayList에 비해 검색성능이 떨어진다.

삽입/삭제시 노드의 주소지만 변경하면 되므로 성능이 좋다.

Head는 첫번째 노드를 가리키는 필드이며 Tail은 마지막 노드를 가리키는 필드이다.





추가로 List와 ArrayList의 차이는 다음과 같다.

List list = new ArrayList();

ArrayList list = new ArrayList();


도형 list = new 정사각형();

정사각형 list = new 정사각형();


클래스 생성시 도형타입으로 생성하면 정사각형이 아닌 직사각형, 삼각형 등 도형 인터페이스를 구현한 클래스에서 사용될 수 있다. 하지만 정사각형 클래스로 생성을 하게 되면 직사각형, 삼각형 등에서는 사용할 수 없다. 



+ 피드백은 언제나 환영입니다 :)



반응형

'기초' 카테고리의 다른 글

[Java]==와 equals  (0) 2018.09.03
[Java]Iterator  (2) 2018.08.28
[Java]Array와 List  (0) 2018.08.23
자바와 자바스크립트의 차이  (0) 2018.08.22
[Java]int와 Integer의 차이  (0) 2018.08.22
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.