JAVA

Java Collection - Map

icedstone 2025. 8. 8. 09:37
반응형

아마 가장 많이 사용하는 Map은 HashMap일 것이다.

HashMap의 구조에 대해서 살펴보자

 

HashMap key값에서 value를 찾을 수 있는 O(1) 형태의 데이터 구조이다.

Java의 모든 객체는 hashCode()와 equals() 메소드를 가지고 있다.

Node<K,List<V>>[] table;

public V get(Object key) {
	int index = object.hashCode() % 16;
	List<V> list = table[index];
    for(int i = 0; i < list.size(); i++) {
      if(list.get(i).equals(key))
      	return list.get(i);
    }
    return null;
}
// 설명을 위해 단순화된 예시, 실제로는 훨씬 복잡하다.

 

객체의 hashCode()를 통해 index의 위치를 탐색하기 때문에 O(1) 형태의 구조를 가지지만 hash충돌이 많을 경우 O(n)의 구조를 가져갈 수 있으니 hashCode(), equals()를 재구현해야할 경우 주의가 필요하다.

 

또한 위에서는 List로 설명하였는데, jdk 1.8부터는 Tree구조를 가져가고 있으니 hash 충돌에도 더 빠른 탐색(O(log n))이 가능하다.(초기에는 List로 저장하다가 충돌이 많아지면 Tree로 변환해서 저장한다.)

 

그 외에도

키 순서가 정렬되어있는 TreeMap

입력 순서(or 접근 순서)가 보장되는 LinkedHashMap

동시성이 보장되는 ConcurrentHashMap

키 값이 enum인 경우 최적화 되어있는 EnumMap

와 같이 다양한 Map 종류를 jdk에서 제공하고 있다.

반응형

'JAVA' 카테고리의 다른 글

Java Collection - List  (0) 2025.08.08
Java IO vs NIO  (0) 2025.07.20
Java Collection Framework  (4) 2025.07.12
interface vs abstract class  (1) 2025.07.05
Blocking vs Non-Blocking, Synchronous vs Asynchronous  (0) 2025.04.21