본문 바로가기
코딩 문제/알고리즘

[자료구조] Map - HashMap, TreeMap, LinkedHashMap

by CODESIGN 2022. 3. 11.

Map


Map은 Key, Value 형식을 가지고 있다.

이 Map에는 크게 3가지의 특징이 있다.

 

1. Key는 중복될 수 없다.

2. Key와 Value 중 하나만 존재하지 않는다.

3. Value는 중복이 가능하다.

 

Map 자료형에 HashMap, LinkedHashMap, TreeMap 등이 있다.

 

 

HashMap


HashMap은 Map을 구현하는 메서드이다.

Hashing을 사용하기 때문에 많은 양의 데이터를 검색할 때 사용하기 좋다. 

 

Map<String, String> user = new HashMap<>();
user.put("Anna", "anna12");
user.put("Sam", "sma12");
// Map의 user라고 선언하고 HashipMap으로 인스턴스 시킨 객체이다.
// put이라는 메서드를 사용해서 user라는 변수에 Key와 Value를 설정해준 것이다.

//get()
user.get("Anna"); //anna12

//containsKey()
System.out.println(user.containsKey("Anna")); // true
System.out.println(user.containsKey("Tom")); // false

//containsValue()
System.out.println(user.containsValue("anna12")); // true
System.out.println(user.containsValue("tom12")); // false
//containsKey(), containsValue()는 메소드에 입력한 key나 value가 있는지 확인하여 boolean값을 반환한다.

//remove()
System.out.println(user.remove("Anna")); //anna12
System.out.println(user.containsValue("Anna")); // false
System.out.println(user.remove("Anna")); // null

 

Map의 특징 중 하나는 순서에 의존하지 않고 key로 value를 가져올 수 있다.

HashMap은 데이터 정렬이 없다. key를 기준으로 정렬할 필요성이 있다면 TreeMap이 좋다.

 

TreeMap


정렬 기준

숫자 -> 알파벳 대문자 -> 알파벳 소문자 -> 한글

 

//put()
TreeMap<String, String> treeMap = new TreeMap<String, String>();
treeMap.put("a","A");
treeMap.put("b","B");
treeMap.put("가","ㄱ");
treeMap.put("나","ㄴ");
treeMap.put("1","one");
treeMap.put("2","one");
treeMap.put("A","a");
treeMap.put("B","b");
//put()은 HashMap과 동일하다.
 
System.out.println(treeMap);
// {1=one, 2=two, A=a, B=b, a=A, b=B, 가=ㄱ, 나=ㄴ}

 

출력 결과를 보면 put() 메서드로 입력할 때 정렬 기준에 맞추지 않고 뒤죽박죽 입력하였지만 출력 시에는 정렬 기준에 맞춰서 출력되는 것을 확인할 수 있다.

 

*TreeMap은 순서가 중요한 클래스이므로 순서에 관련된 메서드들이 있다.

 

//firstKey(), firstEntry()
System.out.println(treeMap.firstKey()); // 1
System.out.println(treeMap.firstEntry()); // 1=one
//firstKey() 메소드는 TreeMap의 정렬기준 가장 첫번째 key를 반환한다.
//firstEntry() 메소드는 key=value의 형태로 반환한다.
 
//lastKey(), lastEntry()
System.out.println(treeMap.lastKey()); // 나
System.out.println(treeMap.lastEntry()); // 나=ㄴ
//lastKey() 메소드는 TreeMap의 정렬기준 가장 마지막 key를 반환한다.
//lastEntry() 메소드는 key=value의 형태로 반환한다.
 
//higherKey(),higerEntry()
System.out.println(treeMap.higherKey("A")); // B
System.out.println(treeMap.higherEntry("A")); // B=b
//higherKey()메소드는 입력한 key의 순서보다 뒤에있는 key를 반환한다.
//higherEntry() 는 key=value 형태로 반환
 
//lowerKey(),lowerEntry()
System.out.println(treeMap.lowerKey("A")); // 2
System.out.println(treeMap.lowerEntry("A")); // 2=two

 

lowerKey() 메서드는 입력한 key의 순서보다 앞에 있는 key를 반환한다.
lowerEntry()는 key=value 형태로 반환

*TreeMap은 정렬 기준이 있다.
LinkedHashMap은 입력된 순서대로 데이터가 출력되는 특징을 가지고 있다.

 

LinkedHashMap


LinkedHashMap은 정렬 기준도 없고 입력 순서대로 정렬되지도 않았다.

 

//put()
LinkedHashMap<String, String> linkedMap = new LinkedHashMap<String, String>();
linkedMap.put("a","A");
linkedMap.put("b","B");
linkedMap.put("가","ㄱ");
linkedMap.put("나","ㄴ");
linkedMap.put("1","one");
linkedMap.put("2","two");
linkedMap.put("A","a");
linkedMap.put("B","b");
//TreeMap과 동일한 순서대로 key와 value를 입력하고 출력해보자.
 
//{a=A, b=B, 가=ㄱ, 나=ㄴ, 1=one, 2=two, A=a, B=b}
System.out.println(linkedMap);
//TreeMap과 다르게 입력된 순서 그대로 출력하는 것을 확인할 수 있다.
 
//HashMap과 비교해보자.
map.put("a","A");
map.put("b","B");
map.put("가","ㄱ");
map.put("나","ㄴ");
map.put("1","one");
map.put("2","two");
map.put("A","a");
map.put("B","b");
// {가=ㄱ, a=A, 1=one, A=a, b=B, 2=two, B=b, 나=ㄴ}
System.out.println(map);

 

댓글