시작하며
자바 성능 튜닝 이야기 [Chap 4] <어디에 담아야하는지...>를 읽고 정리 및 추가 개념을 정리하였다.
- Collection : 가장 상위 인터페이스이다.
- Set : 중복을 허용하지 않는 집합을 처리하기 위한 인터페이스이다.
- SortedSet : 오름차순을 갖는 Set 인터페이스이다.
- List : 순서가 있는 집합을 처리하기 위한 인터페이스 이기 때문에 인덱스가 있어 위치를 지정하여 값을 찾을수 있다. 중복을 허용하며 List 인터페이스를 상속받는 클래스 중에 가장 많이 사용하는 것으로 ArrayList가 있다.
- Queue : 여러개의 객체를 처리하기 전에 담아서 처리할때 사용하기 위한 인터페이스이다. 기본적으로 FIFO 구조이다.
- Map : Key, Value 형태로 구성된 객체의 집합을 처리하기 위한 인터페이스이다. 중복되는 키를 허용하지 않는다.
- SortedMap : 키를 오름차순으로 정렬하는 Map 인터페이스이다.
Set
- HashSet : 데이터를 해쉬 테이블에 담는 클래스로 순서없이 저장된다.
- TreeSet : red-black이라는 트리에 데이터를 담는다. 값에 따라서 순서가 정해진다. 데이터를 담으면서 동시에 정렬하기때문에 성능상 느리다.
- LinkedHashSet : 해쉬 테이블에 데이터를 담는데, 저장된 순서에 따라서 순서가 결정된다.
List
List는 배열의 확장판이라고 보면된다. 배열은 최초 선언시 담을 수 있는 데이터의 개수가 한정적이지만, List는 담을 수 있는 크기가 자동으로 증가되므로, 데이터의 개수를 확실히 모를때 사용된다.
- Vector : 객체 생성시에 크기를 지정할 필요가 없는 배열 클래스이다.
- ArrayList : Vector와 비슷하지만, 동기화 처리가 되어 있지 않다.
- LinkedList : ArrayList와 동일하지만, Queue 인터페이스를 구현했기 때문에 FIFO 큐 작업을 수행한다.
Map
- Hashtable : 데이터를 해쉬 테이블에 담는 클래스이다. 내부에서 관리하는 해쉬 테이블 객체가 동기화되어 있으므로, 동기화가 필요한 부분에서는 이클래스를 사용한다.
- HashMap : 데이터를 해쉬 테이블에 담는 클래스이다. Hashtable 클래스와 다른점은 null 값을 허용한다는 것과 동기화되어 있지 않다는 것이다.
- TreeMap : red-black 트리에 데이터를 담는다. TreeSet과 다른점은 키에 의해서 순서가 정해진다는 것이다.
- LinkedHashMap : HashMap과 거의 동일하며, 이중 연결 리스트 방식을 사용하여 데이터를 담는다는 점만 다르다.
Queue
List도 순서가 있고, Queue도 순서가 있는데, 왜 굳이 Queue를 사용할까?
List의 가장 큰 담점은 데이터가 많은 경우 처리시간이 늘어나는점이다. 가장 앞에 있는 데이터(0번)를 지우면 그다음 1번 데이터부터 마지막 데이터까지 한칸씩 옮기는 작업을 수행해야 하므로, 데이터가 적을때는 상관없지만, 데이터가 많으면 많을수록 시간이 증가한다.