2009. 9. 9. 21:09

Collection

Java 에서 기본적으로 제공하는 자료구조는 Set, List, Queue, Map 등이 있습니다. 각 자료구조는 여러 개의 클래스로 구현되어 있는데, 이 글은 "자바 성능을 결정짓는 코딩 습관과 튜닝 이야기" 를 보고 각 클래스의 특징을 요얏한 것입니다. 자세한 내용은 "자바 성능을 결정짓는 코딩 습관과 튜닝 이야기"를 참고하시기 바랍니다.

Java 가 제공하는 자료구조는 모두 Collection 인터페이스의 구현체라는 것도 잊지 마세요.

Set: 중복을 허용하지 않는 집합을 처리하기 위한 인터페이스
SortedSet: 오름차순을 갖는 Set 인터페이스
  • HashSet: 데이터를 해쉬 테이블에 담는 클래스, 순서 없음.
  • TreeSet: red-black 트리에 데이터를 담음. 값에 따라 순서가 정해짐. HashSet 보다 느림. 데이터를 담으면서 동시에 정렬할 때 유용.
  • LinkedHashSet: 해쉬 테이블에 데이터를 담음. 저장된 순서에 따라 순서가 결정됨.

List: 순서가 있는 집합을 처리하기 위한 인터페이스, 중복 허용.
  • Vector: 크기를 객체 생성시에 지정할 필요가 없는 배열 클래스.
  • ArrayList: Vector 와 비슷하지만, 동기화 처리가 되어 있지 않음.
  • LinkedList: ArrayList 와 동이랗지만, Queue 인터페이스를 구현했기 때문에 FIFO 큐 작업을 수행.

Queue: 여러 개의 객체를 처리하기 전에 담아서 처리할 때 사용하기 위한 인터페이스
  • PriorityQueue: 큐에 추가된 순서와 상관없이 먼저 생성한 객체가 먼저 나온다.
  • LinkedBlockingQueue: 선택적으로 저장할 데이터의 크기를 정할 수도 있는 FIFO 기반의 링크 노드를 사용하는 블로킹 큐.
  • ArrayBlockingQueue: 저장되는 데이터의 크기가 정해져 있는 FIFO 기반의 블로킹 큐.
  • PriorityBlockingQueue: 저장되는 데이터의 크기가 정해져 있지 않고, 객체의 생성 순서에 따라 순서가 저장되는 블로킹 큐.
  • DelayQueue: 큐가 대기하는 시간을 지정하여 처리하도록 되어 있는 큐.
  • synchronousQueue: put() 메소드를 호출하면, 다른 스레드에서 task() 메소드가 호출될 때까지 대기하도록 되어 있는 큐. 이 큐에는 저장되는 데이터가 없음.

Map: 키와 쌍으로 구성된 객체의 집합을 처리하기 위한 인터페이스, 키의 중복은 허용되지 않음
SortedMap: 키를 오름차순으로 정렬하는 Map 인터페이스
  • HashTable: 데이터를 해쉬 테이블에 담는 클래스. 내부에서 관리하는 해쉬 테이블 객체가 동기화되어 있음.
  • HashMap: 데이터를 해쉬 테이블에 담는 클래스. null 값 허용, 동기화 되어 있지 않음.
  • TreeMap: red-black 트리에 데이터를 담는 클래스. 키에 의해 순서가 정해짐.
  • LinkedHashMap: HashMap 과 거의 동일. 이중 연결 리스트(doubly-linked list) 사용.