[백업][가리사니] 자바 collection : 2. set, map
data-structures, java
이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.
자바 Collection 시리즈
Map : 인터페이스
public interface Map<K,V>
[https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
- 맵의 형태로 데이터를 저장한다.
HashMap
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
[https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
- 대표적으로 많이 사용하는 MAP
- 키탐색시 데이터베이스의 해시조인과 유사한 방식으로 찾습니다. (소스코드를 보니 Hash를 매칭 후 이퀄을 이용해 동일한지 확인합니다.)
- 아래와 같은 3가지 객체를 가지고있다.
- 쓰레드 안전을 위해 Collections.synchronizedMap를 사용할 수 있지만 쓰레드에 안전한 자료형을 쓰는것도 하나의 방법입니다.
Set<K> keySet; Collection<V> values; Set<Map.Entry<K,V>> entrySet
WeakHashMap
public class WeakHashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>
[https://docs.oracle.com/javase/8/docs/api/java/util/WeakHashMap.html
- 콜백에 대한 명시적 제거가 없는경우 HashMap 같은경우는 메모리 누수의 원인이 될수있습니다.
- WeakHashMap는 약한 참조로 이부분이 해결된 객체입니다.
Hashtable : thread-safe
public class Hashtable<K,V> extends Dictionary<K,V>
implements Map<K,V>, Cloneable, Serializable
[https://docs.oracle.com/javase/8/docs/api/java/util/Hashtable.html
- 쓰래드 안전이 보장된다.
- 다만 문서에서도 쓰레드안전과 높은 동시성을 원한다면 ConcurrentHashMap를 쓸 것을 권장하고 있다…
ConcurrentHashMap : thread-safe
public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>
implements ConcurrentMap<K,V>, Serializable
[https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html
- 쓰레드에서 안전한 해시맵입니다.
- 다중 쓰래드에서 별도의 쓰레드 안전 처리없이 사용할 수 있습니다.
- 필자는 여러 쓰래드에서 HashMap에 접근해야하는 경우라면 이 클래스를 추천합니다.
TreeMap
public class TreeMap<K,V> extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, Serializable
[https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html
- 입력시 Entry 를 통해 key를 정렬하여 가지고 있습니다.
Set : 인터페이스
public interface Set<E> extends Collection<E>
- List와 달리 순서를 보장하지 않으며, 중복을 허용하지 않음.
- 구현체로는 HashSet, LinkedHashSet, TreeSet 가 있다.
HashSet
- 내부적으로 HashMap을 가지고 Key 탐색을 합니다.
- Key를 순서대로 보관하지 않습니다. LinkedHashSet : 입력순서
- Key를 입력순서대로 보관합니다. TreeSet : 키의 정렬(Comparable) 순서
- 내부적으로 TreeMap을 가지고 Key 탐색을 합니다.
- 키를 트리노드로 정렬하여 가지고 있습니다.