Map
Map : 인터페이스로 키(key)와 값(value)을 한쌍으로 가지는 데이터를 저장하는 특징이있다.
키(key)는 중복을 허용하지 않으며, 값(value)의 경우 중복이 가능하다.
HashMap의 경우 해싱(hasing)기법을 이용하여 데이터를 저장하기 때문에 많은 양의 데이터를 저장하고 있는 경우 검색기능에서 뛰어난 성능을 가진다.
HashMap은 키(key)와 값(value)를 가지는 Entery 내부클래스를 정의하고 Entry 배열을 선언하여 사용한다.
HashMap에서 key와 value는 모두 Object타입으로 선언되어있다. 그러므로 어떤 객체도 HashMap컬렉션에 저장될 수 있다.
메서드
HashMap() : HashMap객체를 생성
HashMap(int initialcapacity) : initialCapacity크기 만큼의 HashMap을 생성한다.
void clear() : HashMap의 모든 객체 제거
Object clone() : HashMap을 복제해서 반환
boolean containsKey(Object key) : HashMap에 key가 존재하는지 확인
boolean containsValue(Object value) : HashMap에 value가 존재하는지 확인
Set entrySet() : HashMap에 저장된 키와 값을 엔트리(키와 값의 결합)형태로 Set에 저장하여 반환
Object get(Object key) : key에 해당하는 value 반환
boolean isEmpty() : HashMap이 비어있는지 알려준다.
Set keySet() : HashMap의 모든 key를 Set으로 반환
Object put(Object key, Object value) : 지정된 키와 값을 HashMap에 저장
void pushAll(Map m) : Map에 저장된 모든 요소를 HashMap에 저장한다.
Object remove(Object key) : HashMap에서 지정된 키로 저장된 객체를 삭제
Object replace(Object key, Object value) : key에 해당하는 value를 매개변수 value로 교체한다.
boolean replace(Object key, Object oldvalue, Object newvalue) : key와 oldvalue가 일치하는 객체를 새로운 객체 Object newvalue로 교체한다.
int siez() : HashMAp에 저장된 요소의 개수를 반환
Collection values() : HashMap에 저장된 모든 값을 컬렉션 형태로 반환
key를 id, value를 비밀번호로 가정하여 데이터를 저장하고 탐색하였다.
HashMap.put()에서 key가 중복되는 경우 뒤에 저장한값이 덮어쓴다.
Map의 모든 요소들을 출력할때는 HashMap.entrySet()을 통해 Set으로 반환하고 Iterator를 통해 각 요소들에 접근한다.
위 예제는 HashMap의 value가 HashMap인 형태인 경우이다.
해싱과 해시함수
해싱 : 해시함수(hash function)를 이용해서 데이터를 해시테이블(hash table)에 저장하고 검색하는 기법
해싱을 구현한 컬렉션 클래스에는 HashSet, HashMap, Hashtable 등잉 있다.
해싱에서는 일반적으로 배열과 링크드 리스트의 자료구조 조합을 사용한다.
TreeMap
TreeMap은 이진검색트리의 형태로 키와 값의 쌍으로 만들어진 데이터를 저장한다.HashMap보다 TreeMap이 검색성능은 더 뛰어나지만 다른 기능들은 대부분 HashMap을 사용하는것이 좋다. 정렬이 필요한경우 TreeMap이 좋다.
TreeMap에 data의 문자들을 저장한다. 해당 문자를 Key로하고 문자의 중복수를 value로 TreeMap에 저장한다.
TreeMap에 의해 Key가 오름차순으로 자동정렬되는것을 볼 수 있다. 이후 TreeMap을 Set으로 변환하고 정렬 기준을 새롭게 주어 중복수가 많은 순으로 저장되게 하였다.
Collections
동기화 컬렉션
멀티 쓰레드 프로그래밍에서 하나의 컬렉션에대해 여러 쓰레드가 동시에 접근하는 경우가 생길 수 있다. 이러한 경우 사용하면 좋은것이 동기화 컬렉션이다. 동기화 컬렉션을 통해 멀티쓰레드 환경에서 컬렉션 동시접근 충돌을 방지할 수 있다.
static Collection synchronizedCollection(Collection c)
static List synchronizedList(List list)
static Set synchronizedSet(Set s)
static Map synchronizedMap(Map m)
static SortedSet synchronizedSortedSet(SortedSet s)
static SortedMap synchronizedSortedMap(SortedMap m)
ex)
List syncList = Collections.synchronizedList(new ArrayList(...));
변경불가 컬렉션(상수 컬렉션)
컬렉션을 변경할 수 없도록 생성할 수 있다. 해당 컬렉션은 읽기전용인 컬렉션이다.
static Collection unmodifiableCollection(Collection c)
static List unmodifiableList(List list)
static Set unmodifiableSet(Set s)
static Map unmodifiableMap(Map m)
static NavigableSet unmodifiableNavigableSet(NavigableSet s)
static SortedSet unmodifiableSortedSet(SortedSet s)
static NavigableMap unmodifiableNavigableMap(NavigableMap m)
static SortedMap unmodifiableSortedMap(SortedMap m)
싱글톤 컬렉션(객체 하나만 저장하는 컬렉션)
static List singletonList(Object o)
static Set singleton(Object o)
static Map singletonMap(Object key, Object value)
한종류의 객체만 저장하는 컬렉션
static Collection checkedCollection(Collection c, Class type)
static List checkedList(List list, Class type)
static Set checkedSet(Set s, Class type)
static Map checkedMap(Map m, Class keyType, Class valueType)
static Queue checked Queue(Queue queue, Class type)
static NavigableSet checkedNavigableSet(NavigableSet s, Class type)
static SortedSet checkedsortedSet(SortedSet s, Class type)
static NavigableMap checkedNavigableMap(NavigableMap m, Class keyType, Class valueType)
static SortedMap checkedSortedMap(SortedMap m, Class keyType, Class valueType)
한종류의 객체만 저장하는 컬렉션의 경우 제네릭스(Generics)로 충분히 가능할것 같다.