List 컬렉션

  • List컬렉션은 인덱스 순서로 저장이 되며 중복된 데이터가 저장이 가능하다. 
  • 구조적으로 데이터를 일렬로 늘여놓는 구조를 가진다.
  • 객체를 저장하면 인덱스가 자동으로 부여되고 부여된 인덱스를 통해 데이터의 검색 및 삭제가 가능

List컬렉션을 구성하는 대표적인 클래스들은 ArrayList,Vector,LinkedList 가있다.

 

List서 사용하는 메소드

 

ArrayList

  • ArrayList는 List 인터페이스를 구현한 클래스이다.
  • 설정된 저장 용량보다 많은 데이터가 들어오면 자동으로 용량이 늘어난다.

List<E> 객체명 = new ArrayList<E>([초기 저장용량]);

 초기 저장용량을 생각하면 기본적으로 10의 저장용량을 가진다. E는 제네릭 타입을 의미하는데 생략하면 Object 타입이된다. Object는 모든 데이터 타입을 저장 가능하지만 데이터를 추가하거나 검색할 때 형 변환을 해야 한다. 

  • 자료구조에는 주로 동일한 데이터 타입을 저자앟기 때문에 제너릭타입을 지정하는 것이 좋다.
  • 기본적으로 데이터를 추가 하거나 삭제할 경우에는 인덱스가 한 칸씩 뒤로 밀리거나 당겨진다.

Vector

ArrayList와 동일한 구조를 갖는다. 차이점이라면 Vector는 자동 동기화를 보장하므로 멀티 스레드 환경에서 안정적으로 사용이 가능하다. 하지만 단일 스레드에서는 ArrayList가 성능이 더 좋다. Vector를 생성하는 방법은 다음과 같다.

List<E> list = new vector<e>([초기용량,</e> 증가용량]);

 초기 용량과 증가 용량을 생략하면 기본 값인 0으로 설정된다.

Vector와 ArrayList의 차이점이면 자동동기화를 보장한다는거지만 동기화의 처리가 필요할때는 Vector보다 Collection, synchronizedCollection, synchronizedList,Map을 이용하는게 성능적으로 더낫다.

 

LinkedList

 List의 구현 클래스이므로 ArrayList나 Vector와 사용 방법은 동일하다. 하지만 구조는 다르게 구성되어있다. 위의 컬렉션들은 인덱스로 데이터를 관리하지만 LinkedList는 인접한 곳을 링크하여 체인처럼 관리한다.  LinkedList는 중간의 데이터를 삭제할 때 인접한 곳의 링크만을 변경하면 되기 때문에 중간에 데이터를 추가/삭제하는 경우 처리 속도가 빠르다.

ArrayList와 LinkedList 비교

 

List<E> list = new LinkedList<E>();

상황에 따라 적절한 컬렉션을 사용하면 될거같다. 찾아보니 vector의경우 요즘 JAVA에서는 잘안쓰이는 추세라고한다...

 

+ Recent posts