Chapter 11. 컬렉션 프레임워크
1. 컬렉션 프레임워크
(10) HashMap과 Hashtable
- Hashtable과 HashMap
- HashMap이 새로운 버전이라고 할 수 있음
- Map을 구현했으므로 키-값 쌍으로 하나의 데이터(Entry)로 저장
- 해싱을 사용하여 많은 양의 데이터를 검색하는데에 뛰어난 성능을 보임
- Entry라는 내부 클래스를 정의하고 Entry 타입의 배열을 선언
- 키와 값
- 키(key) : 컬렉션 내의 키 중에서 유일해야함
- 값(value) : 키와 달리 데이터의 중복을 허용
- 해싱과 해시 함수
- 해싱 : 해시 함수를 이용해 데이터를 해시 테이블에 저장하고 검색하는 기법
- 해시 함수는 데이터가 저장되어 있는 곳을 알려줌
- HashMap에 저장된 데이터를 찾는 과정
- 검색하고자 하는 값의 키로 해시 함수를 호출
- 해시 함수의 계산 결과 (해시 코드) 로 해당 값이 저장되어 있는 링크드 리스트를 찾음
- 링크드 리스트에서 검색한 키와 일치하는 데이터를 찾음
(11) TreeMap
- 이진 검색 트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장
- 검색 관한 부분에 대해서는 HashMap이 TreeMap보다 성능이 뛰어남
- 범위 검색이나 정렬이 필요할 때엔 TreeMap을 사용하는 것이 적합
(12) Collections
- Arrays가 배열과 관련된 메서드를 제공하듯 Collections는 컬렉션과 관련된 메서드를 제공
- 컬렉션의 동기화
- 멀티 쓰레드 프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 수 있으므로 데이터의 일관성(consistency)을 유지하기 위해서는 공유되는 객체에 동기화가 필요
- ArrayList, HashMap 컬렉션으 동기화를 자체적으로 처리하지는 않고 필요한 경우에만 Collections 클래스의 동기화 메서드를 이용해 동기화 처리가 가능
List syncList = Collections.synchronizedList(new ArrayList(...));
- 변경 불가 컬렉션 만들기
- unmodifiable~~()을 활용하여 컬렉션을 읽기 전용으로 만들 수 있음 (변경 불가)
- 싱글톤 컬렉션 만들기
- 한 종류의 객체만 저장하는 컬렉션 만들기
- checked~~~()
- 제네릭스가 나오기 이전인 JDK1.5 미만 버전에서 사용
(13) 컬렉션 클래스 정리 & 요약
- 컬렉션 클래스 간의 관계

- 컬렉션 클래스의 특징
- ArrayList : 배열 기반, 데이터의 추가와 삭제에 불리, 순차적인 추가 삭제는 제일 빠름, 임의의 요소에 대한 접근성이 뛰어남
- LinkedList : 연결 기반, 데이터의 추가와 삭제에 유리, 임의의 요소에 대한 접근성이 좋지 않음
- HashMap : 배열과 연결이 결합된 형태, 추가 / 삭제 / 검색 / 접근성이 모두 뛰어남, 검색에는 최고의 성능을 보임
- TreeMap : 연결 기반, 정렬과 검색(특히 범위 검색)에 적합, 검색 성능은 HashMap보다는 떨어짐
- Stack : Vector를 상속받아 구현
- Queue : LinkedList가 Queue 인터페이스를 구현
- Properties : Hashtable을 상속 받아 구현
- HashSet : HashMap을 이용해서 구현
- TreeSet : TreeMap을 이용해서 구현
- LinkedHashMap, LinkedHashSet : HashMap, HashSet에 저장 순셔 유지 기능 추가