자바 자료구조 - Map(HashMap, TreeMap)

조민·2022년 6월 3일
0

Map(HashMap, TreeMap)

Map의 뜻이 '지도'도 있지만, matching의 뜻과 비슷하다고도 할 수 있습니다.

Map에 저장되는 데이터는 'key-value' pair 형식을 가지고 있습니다.

이는 '주민등록번호-사람이름' 관계와 비슷하다고 보면 됩니다.

  • 주민등록번호는 한 명도 똑같은 사람이 없다. -> [key 중복 X]
  • 주민등록번호는 있는데, 사람 이름이 없는 경우는 없다. -> [key없는 value는 없음.]
  • 이름이 있는 사람이 주민등록번호가 없는 경우는 없다. -> [value 없는 key는 없음.]
  • 주민등록번호가 달라고 사람이름은 똑같을 수 있다.(동명이인) -> value는 중복 가능.

Map에서 특정 데이터를 찾을 때는 key를 이용해서 검색합니다.

즉, 주민등록번호를 입력하면 그에 매칭되는 사람의 이름을 알 수 있다는 말.


이 중 가장 많이 쓰이는 건 put(), get(), remove()

예를 들어, map이란 Map의 객체가 있고,

그 안에 한국사람들의 주민번호-이름 데이터가 저장되어 있다면, map.get("890716-1XXXXXX") 은 "Onsil"이라는 value값을 리턴합니다.


가장 많이 쓰이는 클래스는 HashMap, TreeMap, LinkedHashMap 입니다.

우선, HashMap과 HashTable에 대해 알아보겠습니다.


checkHashMap()을 보면
map1이라는 객체를 만들고,
put()메소드를 이용해 key-value 를 집어넣었습니다.

get()메소드를 이용해 key에 해당하는 value값도 출력하고 있습니다.
해당 key가 없을 때는 null이 리턴됩니다.

"b"-"B" 데이터가 이미 있는데, 새로 "b"-"BitCoin" 데이터를 넣으니 key가 같으니 value 값은 덮어쓰기가 됩니다.

keySet() 메소드는 해당 Map에 key들만 모아 Set으로 리턴합니다.
values() 메소드는 해당 Map에 value들만 모아 Collection으로 리턴합니다.

HashMap


이번엔 HashMap 객체로 map을 만들어봤습니다.
entrySet()이라는 메소드는 출력결과에서 볼 수 있듯이
해당 객체의 데이터를 entrySet element로 가지는 Set을 리턴합니다.

Map.Entry 타입은 getKey()와 getValue()를 통해
key와 value값을 리턴받을 수 있습니다.

또한 containsKey()와 containsValue()를 이용해
해당 값이 map 객체 안에 있는지 확인하고 있습니다.
해당 값이 있으면 true, 없으면 false를 리턴합니다.




remove()와 size() 메소드에 대한 예제입니다.
remove()를 하면 해당 key에 해당하는 key-value 데이터가 삭제됩니다.
삭제하고 나서 size()메소드를 통해 map객체의 크기를 살펴보면,
저장된 데이터가 없기 때문에, 0이 리턴되는 것을 볼 수 있습니다.




TreeMap

HaspMap은 데이터의 정렬이라는게 없습니다.
그런데 개발하다보면 데이터의 key를 기준으로 정렬할 경우가 생기는데,
이 때 유용하게 쓸 수 있는게 TreeMap 클래스입니다.
참고로 정렬 기준은 "숫자 > 알파벳 대문자 > 알파벳 소문자 > 한글" 입니다.



map에 데이터를 무작위로 넣었지만, key 값을 기준으로
정렬되어 출력되는 걸 확인 가능.
참고로 TreeMap은 순서가 중요한 클래스이므로, 순서와 관련된 메소드들이 있습니다.
firstKey(), lastKey(), higherKey(), lowerKey() 예제.

profile
VillainDeveloper

0개의 댓글