8. HashSet
- Set인터페이스를 구현한 가장 대표적인 컬렉션
- 저장순서를 유지하지 않으므로 저장순서를 유지하고자 한다면 LinkedHashSet을 사용해야 함
- HashSet은 내부적으로 HashMap을 이용해서 만들어졌으며, HashSet이란 이름은 해싱을 이용해서 구현했기 때문에 붙여진 것임
9. TreeSet
- 이진검색트리라는 자료구조의 형태로 데이터를 저장하는 컬랙션 클래스
- 트리는 데이터를 순차적으로 저장하는 것이 아니라 저장위치를 찾아서 저장해야하고, 삭제하는 경우 트리의 일부를 재구성해야하므로 링크드 리스트보다 데이터의 추가/삭제시간은 더 걸린다. 대신 배열이나 링크드 리스트에 비해 검색과 정렬기능이 더 뛰어남
10. HashMap과 HashTable
- Hashtable는 HashMap의 구버전
- Map이므로 키와 값을 묶어서 하나의 데이터(entry)로 저장
- 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 보임
- key나 value에 null 저장 가능
- key와 value 모두 Object타입으로 저장하기 때문에 HaspMap의 값으로 HashMap을 다시 저장할 수 있음
*해싱과 해시함수
- 해싱: 해시함수를 이용해서 데이터를 해시테이블에 저장하고 검색하는 기법
- 데이터 검색 과정
- 검색하고자 하는 값의 키로 해시함수 호출
- 해시함수의 계산결과(해시코드)로 해당 값이 저장되어 있는 링크드리스트를 찾음
- 링크드 리스트에서 검색한 키와 일치하는 데이터를 찾음
11. TreeMap
- 이진검색트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장
- 검색과 정렬에 적합한 컬랙션 클래스
- 검색에 관한한 대부분의 경우에서 HashMap이 TreeMap보다 더 뛰어나므로 HashMap을 사용하는 것이 좋으나, 범위검색이나 정렬이 필요한 경우에는 TreeMap이 더 좋음
12. Properties
- (String, String)형태로 key, value를 저장하는 보다 단순화된 컬렉션클래스
- 애플리케이션의 환경설정과 관련된 속성(property)을 저장하는데 사용되며 데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공
13. Collections
1) 컬렉션의 동기화
- 새로 추가된 컬렉션(ArrayList, HashMap 등)은 동기화를 자체적으로 처리하지 않고 필요한 경우에만 동기화 메서드를 이용해서 동기화처리가 가능하도록 변경
- 동기화가 필요할 때 'synchronized'를 붙임
static Collection synchronizedCollection (Collection c)
static List synchronizedList(List list)
2) 변경불가 컬렉션 만들기
- 컬렉션에 저장된 데이터를 보호하기 위해서 컬렉션을 변경할 수 없게, 즉 읽기전용으로 만들어야 할 때 'unmodifiable'을 붙여서 사용
static Set unmodifiableSet (Set s)
static Map unmodifiableMap (Map m)
3) 싱글톤 컬렉션 만들기
- 단 하나의 객체만을 저장하는 컬렉션을 만들고 싶을 때 'singleton'을 붙여서 사용
static List singletonList(Object o)
static Set singleton(Object o)
static Map singletonMap(Object key, Object value)
4) 한 종류의 객체만 저장하는 컬렉션 만들기
- 컬렉션에 지정된 종류의 객체만 저장할 수 있도록 제한하고 싶을 때
static List checkedList(List list, Class type)
List list = new ArrayList();
List checkedList = checkedList(list, String.class)
java의 정석 chapter11