- Collection이란? (https://docs.oracle.com/javase/tutorial/collections/intro/)

여러 요소의 그룹을 하나의 단위로 엮는 객체이고 다양한 인터페이스를 제공합니다. 주로 집계 데이터를 저장, 검색, 수정 및 전달하는 데 사용됩니다.

Class diagram of Java Collections framework
(http://www.codejava.net/java-core/collections/overview-of-java-collections-framework-api-uml-diagram)

Class diagram of Java Collections framework

- List란

Collection 인터페이스를 확장한 자료형으로 동일한 데이터의 중복 입력이 가능하며 순차적이고 다량의 데이터를 입력할 때 주로 사용합니다. 종류는 Vector, Arraylist, Linkedlist가 있습니다.

Class diagram of List API
(http://www.codejava.net/java-core/collections/class-diagram-of-list-api)

Class diagram of List API

각 자료형 특징

- Vector

  • 배열로 구현
  • 데이터 추가 시 공간이 부족한 경우 배열 크기를 2배로 증가시킴
  • 다중 스레드에 적합 (동기화 제공)

- Arraylist

  • 배열로 구현
  • 데이터 추가 시 공간이 부족한 경우 배열 크기를 1.5배로 증가시킴
  • 싱글 스레드에 적합 (동기화가 필요한 경우 Collections.synchronizedList() 사용)

- Linkedlist

  • 연결리스트 라고도 불리며 노드 간에 연결을 통해서 리스트로 구현된 객체
  • 다음 노드의 위치 정보만 가지고 있으며 인덱스를 가지고 있지 않기 때문에 탐색시 순차접근만 가능 (노트 탐색 시 시간이 많이 소요될 수 있음)
  • 노드 추가/삭제는 위치정보의 수정만으로 가능하기 때문에 성능이 좋음

중간 노드 삽입시 Vector, Arraylist / Linkedlist의 차이점

  • Arraylist, Vector
    Arraylist

  • Linkedlist - 노드 생성 후 주소값만 변경
    Linkedlist

(http://www.nextree.co.kr/p6506/ 참고)

종합

  • 삽입할때 Vector의 경우는 동기화를 하며서 삽입하고 공간이 부족할 경우 배열크기를 2배씩 늘리기 때문에 시간이 비교적 ArrayList보다 오래 소요됩니다.
  • 싱글스레드에서는 ArrayList를 사용하는 것을 권장합니다.
  • 중간에 데이터를 삽입할때는 Vector, ArrayList 둘다 배열을 사용해서 중간에 넣고 나머지 배열을 복사 후 삽입하는 과정을 거치기 때문에 LinkedList에 비해서 시간이 오래걸립니다. (LinkedList의 경우는 중간에 삽입할 노드와 노드 간 주소값만 변경해주면 되기때문에 노드 추가 및 제거는 훨씬 빠름)
  • Vector와 ArrayList의 경우는 배열을 사용해서 하기때문에 성능상 중요한 코드인 경우는 일반 배열을 사용해서 구현하는걸 추천합니다.

참고 사이트