HashMap/HashSet

1. HashMap 선언 및 초기화

  • HashMap 선언 및 초기화:

Map<String, Integer> map = new HashMap<>();

2. HashMap 요소 추가 및 수정

  • 요소 추가 (put()):

map.put("apple", 1);  // 키 "apple"과 값 1 추가
map.put("banana", 2); // 키 "banana"와 값 2 추가
  • 키가 이미 존재할 경우 값 수정:

map.put("apple", 3);  // 키 "apple"의 값을 3으로 수정

3. HashMap에서 값 검색 및 확인

  • 특정 키의 값 가져오기 (get()):

int value = map.get("apple");  // 키 "apple"의 값을 반환
  • 키가 존재하는지 확인 (containsKey()):

if (map.containsKey("apple")) {
    System.out.println("apple exists");
}
  • 값이 존재하는지 확인 (containsValue()):

if (map.containsValue(1)) {
    System.out.println("1 exists");
}

4. HashMap 요소 삭제

  • 특정 키의 요소 삭제 (remove()):

map.remove("apple");  // 키 "apple"을 삭제

5. HashMap 순회

  • 키-값 쌍을 순회 (entrySet()):

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
  • 키만 순회 (keySet()):

for (String key : map.keySet()) {
    System.out.println("Key: " + key);
}
  • 값만 순회 (values()):

for (int value : map.values()) {
    System.out.println("Value: " + value);
}

6. 기본값 설정

  • 키가 없을 때 기본값을 반환 (getOrDefault()):

int value = map.getOrDefault("orange", 0);  // 키 "orange"가 없으면 기본값 0 반환

7. 값 업데이트

  • 기존 값 업데이트 또는 기본값 설정 (putIfAbsent()):

map.putIfAbsent("orange", 5);  // "orange"가 없으면 값 5를 삽입

8. HashMap 요소 수 확인

  • HashMap의 크기 확인 (size()):

int size = map.size();  // HashMap의 요소 수 반환

9. 중복 요소 처리 (빈도 계산)

  • 문자열에서 각 문자의 빈도 계산:

Map<Character, Integer> frequencyMap = new HashMap<>();
String str = "hello";

for (char c : str.toCharArray()) {
    frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1);
}

for (Map.Entry<Character, Integer> entry : frequencyMap.entrySet()) {
    System.out.println("Character: " + entry.getKey() + ", Frequency: " + entry.getValue());
}

10. HashSet 선언 및 초기화

  • HashSet 선언 및 초기화:

Set<Integer> set = new HashSet<>();

11. HashSet 요소 추가 및 삭제

  • 요소 추가 (add()):

set.add(1);  // 1 추가
set.add(2);  // 2 추가
  • 요소 삭제 (remove()):

set.remove(1);  // 1 삭제

12. HashSet에서 요소 검색

  • 특정 값이 존재하는지 확인 (contains()):

if (set.contains(2)) {
    System.out.println("2 is in the set");
}

13. HashSet 순회

  • HashSet의 요소 순회:

for (int num : set) {
    System.out.println(num);
}

14. HashSet 크기 확인

  • HashSet의 크기 확인 (size()):

int size = set.size();  // Set의 크기 반환

15. 교집합, 합집합, 차집합

  • 두 Set의 교집합 (retainAll()):

Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3));
Set<Integer> set2 = new HashSet<>(Arrays.asList(2, 3, 4));

set1.retainAll(set2);  // set1과 set2의 교집합으로 set1 갱신 (결과: [2, 3])
  • 두 Set의 합집합 (addAll()):

Set<Integer> union = new HashSet<>(set1);
union.addAll(set2);  // set1과 set2의 합집합 생성
  • 두 Set의 차집합 (removeAll()):

Set<Integer> difference = new HashSet<>(set1);
difference.removeAll(set2);  // set1에서 set2의 요소를 제외한 차집합 생성

16. 중복 검사 (HashSet 활용)

  • 배열에 중복 요소가 있는지 확인:

int[] arr = {1, 2, 3, 4, 5, 1};
Set<Integer> set = new HashSet<>();

for (int num : arr) {
    if (!set.add(num)) {
        System.out.println("Duplicate found: " + num);
    }
}

17. 2개 이상의 맵을 동시에 업데이트

  • 두 해시맵을 결합하여 병합:

Map<String, Integer> map1 = new HashMap<>();
Map<String, Integer> map2 = new HashMap<>();

map1.put("apple", 1);
map1.put("banana", 2);

map2.put("apple", 3);
map2.put("cherry", 4);

map2.forEach((key, value) -> map1.merge(key, value, Integer::sum));  // 같은 키가 존재할 경우 값을 더함

18. 순서가 중요한 경우 (LinkedHashMap 사용)

  • 입력된 순서를 유지하는 맵 선언:

Map<String, Integer> linkedMap = new LinkedHashMap<>();
linkedMap.put("apple", 1);
linkedMap.put("banana", 2);
linkedMap.put("cherry", 3);

for (Map.Entry<String, Integer> entry : linkedMap.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}

19. TreeMap 사용 (정렬된 해시맵)

  • 정렬된 맵 사용 (오름차순 정렬):

Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("banana", 2);
treeMap.put("apple", 1);
treeMap.put("cherry", 3);

for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}

Last updated