PROGRAMMING LANGUAGE/자바

컬렉션 프레임워크 ArrayList, LinkedList, Vector

JC0 2023. 12. 29. 00:25

ArrayList

ArrayList는 List 인터페이스 구현 클래스로, ArrayList에 객체를 추가하면 객체가 인덱스로 관리된다.

배열은 생성할 때 크기가 고정되고 사용 중에 크기를 변경할 수 없지만, ArrayList는 저장 용량을 초과한 객체들이 들어오면 자동적으로 저장 용량이 늘어난다.

 

구조

기본적인 사용 방법

// ArrayList 생성 방법
List<String> list = new ArrayList<String>();

// ArrayList 객체 추가
list.add("어레이리스트");

// ArrayList 객체 가져오기
String name = list.get(0);

 

특징

ArrayList의 특정 인덱스에 있는 값을 삭제하면 오른쪽에 있는 값들이 한칸 씩 왼쪽으로 이동해야 한다.

삽입시에는 반대로 오른쪽으로 이동해야 한다. 최악의 경우에 시간복잡도는 O(N)을 가진다.

인덱스 검색은 시간복잡도 O(1)을 가지고 있다.

특정 인덱스 검색은 빠르지만 삽입과 삭제시에는 불리하다고 할 수 있다.

 

LinkedList

LinkedList는 ArrayList와 사용방법이 비슷하지만 구조는 다르다. 참조를 통해서 연결되어 있다.(Chain)

 

구조

LinkedList는 연결되어 있기 때문에 삭제 시에 해당 노드의 양쪽 노드에서 삭제되는 노드의 연결을 끊고

양쪽 노드를 서로 연결해주면 되기 때문에 삽입과 삭제가 빈번한 경우에는 LinkedList가 유리하다고 할 수 있다.

 

Vector

Vector는 ArrayList와 동일한 내부 구조를 가지고 있다. Vector는 동기화된(Synchronized) 메소드로 구성되어 있기 때문에 스레드 안전(Thread Safe)하다고 할 수 있다.

동기화란 다중 스레드 환경에서 Syncronized키워드를 사용하여 어떠한 스레드가 메서드를 실행중일 때 다른 스레드가 접근할 수 없도록 하는 것을 말한다.

단일 스레드에서는 ArrayList를 사용하는 것이 속도에 도움이 되고, 다중 스레드 환경에서는 Vector를 사용하는 것이 안전하다.