January 14, 2021
생성 및 선언
Map<String, Double> productPrice = new HashMap<>();
put(key, value)
boolean containsKey(key)
void putIfAbsent()
: 키가 없거나 null로 매핑 된 경우 키 - 값 쌍이 맵에 추가된다.
map.putIfAbsent(ch, 1);
void computeIfPresent()
: 항목을 추가하거나 맵의 기존 항목을 수정한다. 키를 가지는 엔트리가 존재하지 않는 경우는 아무것도 실시하지 않는다.
map.computeIfPresent(ch, (k, v)-> ++v);
import java.util.HashMap;
import java.util.Map;
public class WordFrequencyFinder {
private Map<String, Integer> map = new HashMap<>();
{
map.put("Java", 0);
map.put("Jakarta", 0);
map.put("Eclipse", 0);
}
public void read(String text) {
for (String word : text.split(" ")) {
if (map.containsKey(word)) {
Integer value = map.get(word);
map.put(word, ++value);
}
}
}
}
public void read(String text) {
for (String word : text.split(" ")) {
map.computeIfPresent(word, (String key, Integer value) -> ++value);
}
}
Key로 정렬:
Object[] keys = map.keySet().toArray();
Arrays.sort(mapkey);
for(Object tmp: keys) {
System.out.println(tmp+ " : "+ map.get(tmp));
}
// 또는
List<String> keys = new ArrayList<>(map.keySet());
keys.sort((s1, s2)->s1.compareTo(s2));
for (String key : keys) {
System.out.println("Key: " + key);
}
Value로 정렬: compareTo()
사용
Map<String, String> map = new HashMap<>();
List<String> values = new ArrayList<>(map.values());
//(s1, s2)->s1.compareTo(s2) 를 String::compareTo로 대체 가능
values.sort(String::compareTo);
for (String value : values) {
System.out.println("Value: " + value);
}
Java8부터 지원되는 Stream API를 사용한 방법
public <K, V extends Comparable<V>> V maxUsingStreamAndMethodReference(Map<K, V> map) {
Optional<Entry<K, V>> maxEntry = map.entrySet()
.stream()
.max(Comparator.comparing(Map.Entry::getValue));
return maxEntry.get()
.getValue();
}
📌 인터페이스 Map.Entry
📌 Optional
여기 참조
참고 4: HashMap을 효과적으로 사용하는 방법(번역)