Collection, Map
Last updated
Last updated
Collection : 가장 상위 인터페이스
List : 순서가 있는 집합을 처리하기 위한 인터페이스, 인덱스 O, 중복 허용, List interface중 ArrayList를 가장 많이 사용
Queue : FIFO 구조로 여러개의 객체를 처리하기 전에 담아놓고 처리하는 인터페이스
Set : 중복을 허용하지 않는 집합을 처리하기 위한 인터페이스
SortedSet : 오름차순을 갖는 Set 인터페이스
Map : 키와 값의 쌍으로 구성된 객체의 집합을 처리하기 위한 interface, key에 대해 중복을 허용하지 않음
SortedMap : 키를 오름차순으로 정렬하는 Map interface
HashSet : 데이터를 해쉬 테이블에 담는 클래스로 순서 없이 저장됨
LinkedHashSet : 해쉬 테이블에 데이터를 담음. 저장된 순서에 따라 순서가 결정됨
TreeSet : red-black 이라는 tree에 담음. 값에 따라 순서가 정해짐. 데이터를 담으면서 동시에 정렬하여 HashSet보다 성능상 느림
red-black tree 특징
각각의 노드는 검은색이나 붉은색이어야 함
가장 상위(root)노드는 검은색
가장 말단(leaves)노드는 검은색
붉은 노드는 검은 하위 노드만을 가짐(따라서 검은 노드는 붉은 상위 노드만을 가짐)
모든 말단 노드로 이동하는 경로의 검은 노드 수는 동일함
Vector : 객체 생성시 크기를 지정할 필요가 없는 배열 클래스
ArrayList : Vector와 비슷 but 동기화 X
LinkedList : ArrayList와 동일하지만 Queue 인터페이스를 구현해서 FIFO 큐 작업을 수행함
HashTable : 해쉬 테이블에 담는 클래스, 동기화 O
HashMap : 해쉬 테이블에 담는 클래스, HashTable과 다른점은 null 허용 및 동기화 X
TreeMap : red-black tree에 데이터를 담음. TreeSet과 다른점은 key에 의해 순서가 정해짐
LinkedHashMap : HashMap과 거의 동일하며 이중 연결리스트(doubly-linkedlist) 방식을 사용해 데이터를 담음
PriorityQueue : 큐에 추가도니 순서와 상관없이 먼저 생성된 객체가 먼저 나오도록 설계된 큐
LinkedBlockingQueue : 저장할 데이터 크기를 선택적으로 지정 가능, FIFO기반의 링크 노드를 사용하는 Blocking Queue
ArrayBlockingQueue : 저장되는 데이터의 크기가 정해져 있는 FIFO 기반의 Blocking Queue
PriorityBlockingQueue : 저장되는 데이터의 크기가 정해져 있지 않고, 객체의 생성 순서에따라 순서가 저장되는 Blocking Queue
DelayQueue : 큐가 대기하는 시간을 지정, 처리하도록 되어있는 큐
SynchronousQueue : put() 메서드를 호출하면 다른 스레드에서 take()메서드가 호출될 때까지 대기하도록 되어 있는큐, 0이나 null을 리턴
HashSet
저장시 순서를 보장하지 않음
LinkedHashSet
저장시 순서를 보장한다는 점에서 HashSet과 차이
This technique is particularly useful if a module takes a set on input, copies it, and later returns results whose order is determined by that of the copy.
TreeSet
데이터의 저장하면서 동시에 정렬
→ HashSet과 LinkedHashSet 은 구현에 따라서 약간의 성능차이는 있을 수 있음.
하지만 TreeSet은 눈에 띄게 엄청 느림
ArrayList
보통 셋 중 가장 빠름(넣는건 비슷, 꺼내는데에서 차이가 큼)
동기화 관리 X (그래서 빠름)
첫번째 값 삭제시 마지막 값 삭제시보다 많이 느림(배열 사용)
Vector
동기화 관리 O(synchronized 선언) → 성능 저하
첫번째 값 삭제시 마지막 값 삭제시보다 많이 느림(배열 사용)
LinkedList
Queue 인터페이스를 상속받음 → peek() , poll() 메서드 사용
HashMap
동기화 X
HashTable
동기화 O
HashTable은 싱글 스레드로 동작 → 성능 이슈
ConcurrentHashMap의 사용을 권장
LinkedHashMap
입력된 key의 순서가 보장됨. (입력한 순서를 기억하는 자료구조)
TreeeMap
트리 형태로 정렬하여 데이터를 저장하는 TreeMap 클래스가 가장 느린 것을 알 수 있음.