Collection 및 Map 인터페이스의 이해
● Collection: 가장 상위 인터페이스이다.
● Set: 중복을 허용하지 않는 집합을 처리하기 위한 인터페이스이다.
● SortedSet: 오름차순을 갖는 Set 인터페이스이다.
● List: 순서가 있는 집합을 처리하기 위한 인터페이스이기 때문에 인덱스가 있어 위치를 지정하여 값을 찾을 수 있고, 중복을 허용한다.
● Queue: 여러 개의 객체를 처리하기 전에 담아서 처리할 때 사용하기 위한 인터페이스이다. 기본적으로 FIFO를 따른다.
● Map: Map은 키와 값의 쌍으로 구성된 객체의 집합을 처리하기 위한 인터페이스이다. 이 객체는 중복되는 키를 허용하지 않는다.
● SortedMap: 키를 오름차순으로 정렬하는 Map 인터페이스이다.
◈ Set
HashSet: 데이터를 해쉬 테이블에 담는 클래스로 순서 없이 저장된다.
TreeSet: red-black이라는 트리에 데이터를 담는다. 값에 따라서 순서가 정해진다.
HashSet보다 성능상 느리다. 데이터를 담으면서 동시에 정렬할 때 유용하다.
LinkedHashSet: 해쉬 테이블에 데이터를 담는데, 저장된 순서에 따라서 순서가 결정된다.
◈ List
Vector: 크기를 객체 생성시에 지정할 필요가 없는 배열클래스이다.
ArrayList: Vector와 비슷하지만, 동기화 처리가 되어 있지 않다.
LinkedList: ArrayList와 동일하지만, Queue 인터페이스를 구현했기 때문에 FIFO큐 작업을 수행한다.
◈ Map
Hashtable: 데이터를 해쉬 테이블에 담는 클래스이다. 내부에서 관리하는 해쉬 테이블 객체가 동기화되어 있다.
HashMap: 데이터를 해쉬 테이블에 담는 클래스이다. Hashtable 클래스와 다른점은 null 값을 허용한다는 것과 동기화되어 있지 않다는 것이다.
TreeMap: red-black 트리에 데이터를 담는다. TreeSet과 다른 점은 키에 의해서 순서가 정해진다는 것이다.
LinkedHashMap: HashMap과 거의 동일하며 이중 연결 리스트라는 방식을 하용하여 데이터를 담는다는 점만 다르다.
◈ Queue
PriorityQueue: 큐에 추가된 순서와 상관없이 먼저 생성한 객체가 먼저 나오도록 되어 있는 큐이다.
LinkedBlockingQueue: 선택적으로 저장할 데이터의 크기를 정할 수도 있는 FIFO기반의 링크 노드를 사용하는 블로킹 큐이다.
ArrayBlockingQueue: 저장되는 데이터의 크기가 정해져 있는 FIFO 기반의 블로킹 큐이다.
PriorityBlockingQueue: 저장되는 데이터의 크기가 정해져 있지 않고, 객체의 생성순서에 따라서 순서가 저장되는 블로킹 큐이다.
DelayQueue: 큐가 대기하는 시간을 지정하여 처리하도록 되어 있는 큐이다.
SynchronousQueue: put()메소드를 호출하면, 다른 스레드에서 take() 메소드가 호출될 때까지 대기하도록 되어 있는 큐이다.
이 큐에는 저장되는 데이터가 없다. API에서 제공하는 대부분의 메소드는 0이나 null을 리턴한다.
※ 웹 어플리케이션에서 10,000개 이상의 데이터를 저장하지 않는 이상 Set, List, Map 을 사용해도 시간상 별 차이는 없다.
Sun에서 정리한 가장 안정적인 클래스는 다음과 같다.
------------------------
인터페이스 클래스
Set HashSet
List ArrayList
Map HashMap
Queue LinkedList
------------------------
■ Collection 관련 클래스의 동기화
동기화 되지 않은 클래스: HashSet, TreeSet, LinkedHashSet, ArrayList, LinkedList, HashMap, TreeMap, LinkedHashMap
동기화 되어 있는 클래스: Vector, Hashtable
Collections클래스에는 최신 버전 클래스들의 동기화를 지원하기 위한 synchronized로 시작하는 메소드들이 있다.
Set s = Collections.synchronizedSet(new HashSet(...));
List list = Collections.synchronizedList(new ArrayList(...));
Map m = Collections.synchronizedMap(new HashMap(...));
|