JAVA/자료구조
MAP
E재HO
2023. 4. 5. 15:57
map은 알고리즘을 풀 때, 엄청 ~ 많이 쓰이니까 잘 알아 둬야 한다. 특히 순회와 정렬은 잘 알고 있어야 풀리는 문제가 많다.
1. 순회
//hm.entrySet() 이용하기
//Map은 Key-Value 묶음을 가지기 때문에 Entry 라고 표현한다.
Map<String, String> hm = new HashMap<>();
hm.put("hi","a");
hm.put("h2","b");
hm.put("he","c");
for(Map.Entry<String,String> entry : hm.entrySet()){
System.out.println(entry.getKey());
System.out.print(" "+entry.getValue());
}
hi a
h2 b
he c
이 방식은 Map 전체를 다 빼와서 key와 value를 언제든지 받아볼 수 있어서 좋다.
// 또 다른 방식은 keySet()이용하기
Map<String,String> hm = new HashMap<>();
hm.put("hi","a");
hm.put("h2","b");
hm.put("he","c");
for(String key : hm.keySet()){
System.out.println(hm.get(key));
}
a
b
c
이 방식은 간단해서 좋다.
2. 정렬
우선 리스트 방식으로 정렬하는 것을 알아보자.
map의 key나 value를 List로 이식한다.
그리고 이식된 List 를 정렬.
//List를 이용한 정렬 방식
Map<String,String> hm = new HashMap<>();
hm.put("hi","a");
hm.put("h2","b");
hm.put("he","c");
//value값으로 정렬 하거나 key값으로 정렬
// List<String> list = new ArrayList<>(hm.keySet());
List<String> list = new ArrayList<>(hm.values());
list.sort( (o1,o2) -> o1.compareTo(o2));
for(String now : list ){
System.out.println(hm.get(now));
}
// value값으로 정렬 시
h2
he
hi
// key값으로 정렬 시
a
b
c
하지만 이 방식은 value 값으로 정렬한다 하더라도 큰 의미가 없을 수 있다. value값으로 정렬해도 정렬된 value 값으로 해당 key을 조회할 수 없어서 무용한 순간이 온다.
좀 어렵지만 확실한 방법은 TreeMap을 사용하는 것이다.
이 두가지를 알아야 맵을 활용한 문제에서도 당황하지 않을 수 있다.
map은 알고리즘을 풀 때, 엄청 ~ 많이 쓰이니까 잘 알아 둬야 한다. 특히 순회와 정렬은 잘 알고 있어야 풀리는 문제가 많다.