Java Map
1. Map이란?
- key와 value의 쌍으로 이루어진 데이터의 집합
- 순서 유지 X
- key 중복 X, 값 중복 O
- 구현클래스 : HashMap, TreeMap, Hashtable, Properties 등
2. 기본 메서드
Map<String, String> map = new HashMap<>();
map.put("key", "value"); // key값이 이미 존재하는 경우 Value 값을 갱신
map.get("key");
map.containsKey("key");
map.remove("key");
map.size();
map.getOrDefault(String key, String defaultValue); // key가 있다면 value 반환, 없으면 defaultValue 반환
3. Map 활용하기
forEach
방법 1. keySet과 iterator 이용하여 key로 value 조회
Iterator<String> keys = map.keySet().iterator();
while(keys.hasNext()){
String key = keys.next();
String value = map.get(key);
}
방법 2. entrySet을 이용하여 forEach 문으로 Entry를 조회
for( Map.Entry<String, String> entry : map.entrySet() ){
String key = entry.getKey();
String value = entry.getValue();
}
for (Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
}
방법 3. keySet 이용하여 key로 value 조회
for(String key : map.keySet()){
String strValue = map.get(strKey);
}
방법 4. (Java 1.8 이상) Lambda식 이용
map.forEach((key, value)->{
System.out.println(key +":"+ value);
});
정렬
1) Key로 정렬
방법 1. keySet 이용하여 Collection.sort()
- 내림차순 :
Collection.reverse()
List<String> keySet = new ArrayList<>(map.keySet());
Collections.sort(keySet); // 오름차순
Collections.reverse(keySet); // 내림차순
방법 2. entrySet과 Lambda식 이용
List<Map.Entry<String, Integer>> entryList = new LinkedList<>(map.entrySet());
entryList.sort(((o1, o2) -> map.get(o1.getKey()) - map.get(o2.getKey()))); // 오름차순
2) Value로 정렬
방법 1. keySet을 compareTo()
이용하여 value 기준으로 정렬
List<String> keys = new ArrayList<>(map.keySet());
Collections.sort(keys, (v1, v2) -> (map.get(v1).compareTo(map.get(v2)))); // 오름차순
방법 2. entrySet과 Lambda식 이용
List<Map.Entry<String, String>> entryList = new LinkedList<>(map.entrySet());
entryList.sort(((o1, o2) -> o1.getValue().num - o2.getValue().num)); // 오름차순
참고 자료
- Java의 정석 Chapter 11. 컬렉션 프레임웍(Collection Framework)
- [Java] Map이란? (개념, 활용, 예제 등)
- HashMap 전체 참조(foreach) 방법 (Java)
- [java] HashMap value(값)로 정렬하기
- [Java] HashMap Value 기준으로 정렬하기
Leave a comment