해싱을 사용하기 때문에 데이터를 검색, 삽입, 삭제하는데 O(1)의 시간이 걸린다.
HashMap<K, V> map = new HashMap<K, V>();
// 초기 용량을 지정하여 해시맵 생성
HashMap<K, V> map = new HashMap<K, V>(int initialCapacity);
// 초기 용량과 로드 팩터를 지정하여 해시맵 생성
HashMap<K, V> map = new HashMap<K, V>(int initialCapacity, float loadFactor);
// 다른 맵의 내용을 복사하여 생성
HashMap<K, V> map2 = new HashMap<K, V>(map1);
HashMap 주요 메서드
키와 값을 추가하거나 업데이트
map.put(K key, V value);
키를 기준으로 값 가져오기
V value = map.get(K key);
(못 찾으면 null)
V value = map.getOrDefault(K key, Object defaultValue);
특정 키가 존재하는지 확인
boolean exists = map.containsKey(K key);
특정 값이 존재하는지 확인
boolean exists = map.containsValue(V value);
특정 키-값 쌍 삭제
V removedValue = map.remove(K key);
value 대체
V replace(K key, V value);
value까지 확인 후 newValue로 대체
boolean replace(K key, V oldValue, V newValue);
해시맵의 모든 요소를 삭제
map.clear();
복제
Object clone()
Map의 모든 요소를 HashMap에 저장
void putAll(map M)
해시맵의 크기 가져오기
int size = map.size();
해시맵이 비어 있는지 확인
boolean isEmpty = map.isEmpty();
모든 키를 Set으로 가져오기
Set<K> keys = map.keySet();
모든 값을 Collection으로 가져오기
Collection<V> values = map.values();
모든 키-값 쌍을 Set으로 가져오기
Set<Map.Entry<K, V>> entries = map.entrySet();
모든 값 출력(4가지 방법)
// 1. 간단한 출력
for (Integer value : map.values()) {
System.out.println(value);
}
// 2. 모든 값 출력(entrySet()과 Map.Entry를 사용)
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getValue());
}
// 3. 모든 값 출력(forEach() 메서드를 이용한 람다 표현식)
map.forEach((key, value) -> System.out.println(value));
// 4. Iterator로 값 출력
Iterator<Integer> iterator = map.values().iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
같은 키를 2번 put하면 value가 새로운 값으로 대체됨.
특정 리스트의 값을 값과 값의 개수 형태로 저장
// 리스트 생성
List<String> list = List.of("Apple", "Banana", "Apple", "Cherry", "Banana", "Apple");
// HashMap 생성
HashMap<String, Integer> map = new HashMap<>();
// 리스트의 값을 해시맵에 저장
for (String value : list) {
map.put(value, map.getOrDefault(value, 0) + 1);
}
// 출력
System.out.println("결과: " + map);
그 자체로는 순서가 없어서 정렬이 안됨.
만약 키 정렬을 하고 싶다면 TreeMap을 사용하면 되고,
값 정렬을 하고 싶다면 아래의 방법으로 값만 뽑아내서 값 배열만 정렬이 가능.. 엄밀히 말하면 키-값으론 정렬이 어려워서 List<Map.Entry<K, V>>로 바꿔야 함
List<Integer> counts = new ArrayList<>(map.values());
counts.sort(Collections.reverseOrder());