HashMap & Hashtable - 순서 X, 중복 (키 X, 값 O)
- Map 인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장
HashMap
- Map 인터페이스를 구현하는 대표적인 컬렉션 클래스
- HashMap (동기화 X) : Hashtable (동기화 O)의 신버전
- 순서를 유지하려면 LinkedHashMap클래스 사용하면 됨
TreeMap
- 범위 검색과 정렬에 유리한 컬렉션 클래스
- HashMap보다 데이터 추가, 삭제에 시간이 더 걸림
HashMap의 키와 값
해싱기법으로 데이터를 저장. 데이터가 많아도 검색이 빠름
키 (key) : 컬렉션 내의 키 중에서 유일해야 함
값 (value) : 키와 달리 데이터의 중복을 허용해야 함
해싱 (hashing)
- 해시함수(hash function)로 해시 테이블에 데이터를 저장, 검색
1. 키로 해시함수를 호출해서 해시코드를 얻는다
2. 해시코드(해시함수의 반환값)에 대응하는 링크드리스트를 배열에서 찾는다
3. 링크드리스트에서 키와 일치하는 데이터를 찾는다
* 해시함수는 같은 키에 대해 항상 같은 해시코드를 반환해야 함
서로 다른 키일지라도 같은 값의 해시코드를 반환할 수도 있음
- 해시테이블은 배열과 링크드 리스트가 조합된 형태
HashMap 주요 메서드
< 예제 1 >
< 예제 2 >
< 예제 3 >
Collections
컬렉션을 위한 메서드(static)를 제공
1. 컬렉션 채우기, 복사, 정렬, 검색 - fill(), copy(), sort(), binarySearch() 등
2. 컬렉션의 동기화 - synchronizedXXX()
List syncList = Collections.synchronizedList(new ArrayList(...));
동기화 된 리스트 동기화 되지 않은 리스트
3. 변경불가 (readOnly) 컬렉션 만들기 - unmodifiableXXX()
4. 싱글톤 컬렉션 만들기 - singletonXXX()
객체 1개만 저장
5. 한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()
List list = new ArrayList();
List checkedList = checkedList(list, String.class) // String만 저장 가능
checkedList.add("abc"); // OK
checkedList.add(new Integer(3)); // 에러. ClassCastException발생
< 예제 1 >