프로그래밍 언어/[JAVA]

[JAVA] Map 컬렉션 클래스에 대하여

연구소장 J 2022. 6. 21. 21:29

Map 컬렉션 클래스

JAVA의 Map 컬렉션 클래스는 Collection 인터페이스를 상속하진 않지만 Collection 자료구조를 이야기 할 때 빠지지 않는다. Map 클래스는 Map 인터페이스를 상속한다.

 

Map 클래스는 중복을 허용하지 않는 Key 값과 그에 대응하는 중복이 허용되는 Value 값이 쌍을 이루어 저장되는 자료구조이다. 이때 Key 값은 Value를 찾기 위한 색인과 같은 역할을 한다.

 

Map 클래스는 요소의 저장 순서를 유지하지 않는다. Key는 중복을 허용하지 않지만, Value는 중복을 허용한다.

 

Map 대표적인 컬렉션 클래스 3가지에 대하여 알아보자.

 

 

HashMap<K, V>

HashMap 클래스는 Map 클래스에서 가장 많이 사용되는 클래스 중 하나이다. HashMap 클래스는 해시 알고리즘을 사용하여 검색 속도가 매우 빠르다. 

 

HashMap에서 자주 사용되는 메서드들을 예제를 통해 알아보자.

 

HashMap<String, Integer> student = new HashMap<String,Integer>();


// put(key, value) : key 값에 대응되는 value 저장
student.put("제니", 26);
student.put("아이유", 30);
student.put("아이린", 30); // 중복되는 value 가능
student.put("로제", 25);
student.put("로제", 24);	// 중복되는 key 불가능

// Enhanced for 문과 get(key) 메소드를 통한 데이터 출력
for(String key : student.keySet()){
	System.out.println("이름 : " + key + ", " + "나이 : " + student.get(key) );
}

// remove() 메소드를 통한 데이터 삭제
student.remove("제니");

// replace(key, value) 및 put(key, value) 메서드를 통한 데이터 수정
student.replace("아이유", 25);
student.put("아이린", 23);

System.out.println(); // 줄바꿈

// Enhanced for 문과 get(key) 메소드를 통한 데이터 출력
for(String key : student.keySet()){
	System.out.println("이름 : " + key + ", " + "나이 : " + student.get(key) );
}

 

 

수행결과 :

 

수행결과

수행결과를 보면 데이터가 순서에 상관없이 저장되며, key의 중복을 허용하지 않는 것을 확인 할 수 있다. 

 

 

 

HashTable<K, V>

HashTable 클래스는 HashMap 클래스와 같은 동작을 한다. HashMap 클래스와 마찬가지로 Map 인터페이스를 상속받는다. 다만 다른점은 HashTable은 HashMap과 다르게 업데이트가 꾸준히 이루어지고 있지 않다. 기존 코드와의 호환성을 위해 남아있는 이유가 크다. 따라서 HashMap을 사용하는 편이 낫다.

 

HashTable은 Thread-safe 하고, HashMap은 Thread-safe하지 않다. 따라서 멀티스레드 환경이 아니라면 HashTable은 HashMap 보다 성능이 떨어진다. 

 

HashTable은 Key에 null을 허용하지 않지만, HashMap은 Key에 null을 허용한다.

 

HashMap은 보조해시를 사용하기 때문에 보조 해시 함수를 사용하지 않는 HashTable에 비해 해시 충돌이 덜 발생할 수 있다.

 

 

TreeMap<K, V>

TreeMap 클래스는 키와 값을 한 쌍으로 하는 (Key, Value) 데이터를 레드-블랙 트리로 저장한다. TreeMap 클래스는 Key 값이 중복되지 않는다는 점은 다른 Map 클래스와 동일하지만, 데이터의 Key값을 기준으로 정렬된다는 점이 특징이다.

 

따라서 데이터의 정렬이 필요하다면 TreeMap의 사용을 고려해볼 수 있다. 하지만, 정렬을 하는 특징으로 인하여 삽입 및 삭제가 느리기 때문에 사용에 주의가 필요하다.

 

반응형