연관 배열 사용하기

Java:
연관 배열 사용하기

방법:

Java는 몇몇 언어들처럼 내장 연관 배열을 제공하지 않지만, Map 인터페이스와 HashMap, TreeMap과 같은 클래스를 제공하여 그 역할을 수행합니다. 여기 HashMap 사용법이 있습니다:

import java.util.HashMap;
import java.util.Map;

public class LearnMaps {
    public static void main(String[] args) {
        // HashMap 생성
        Map<String, Integer> ageOfFriends = new HashMap<>();
        
        // 요소 추가
        ageOfFriends.put("Alice", 24);
        ageOfFriends.put("Bob", 30);
        ageOfFriends.put("Charlie", 28);

        // 요소 접근
        System.out.println("Alice의 나이: " + ageOfFriends.get("Alice"));
        
        // 존재하지 않는 키 처리
        System.out.println("맵에 없는 사람의 나이: " + ageOfFriends.getOrDefault("Dan", -1));

        // 요소 순회
        for (Map.Entry<String, Integer> entry : ageOfFriends.entrySet()) {
            System.out.println(entry.getKey() + "는 " + entry.getValue() + "살입니다.");
        }
    }
}

샘플 출력:

Alice의 나이: 24
맵에 없는 사람의 나이: -1
Alice는 24살입니다.
Bob은 30살입니다.
Charlie는 28살입니다.

HashMap은 하나의 구현일 뿐입니다. 키가 유일하며 정렬이 필요한 경우, TreeMap을 고려해 보십시오. 삽입 순서를 유지하는 맵이 필요하다면, LinkedHashMap이 답입니다.

심화 학습

Java의 맵은 JDK 1.2에서 소개된 컬렉션 프레임워크의 일부이지만, 엔트리 순회를 더 쉽게 만들어주는 Java 8의 forEach 메소드 도입을 포함하여, 여러 해에 걸쳐 상당한 개선을 거쳐왔습니다. 맵 구현(HashMap, LinkedHashMap, TreeMap) 선택은 정렬과 성능에 대한 특정 요구 사항에 따라 결정되어야 합니다. 예를 들어, HashMap은 해시 함수가 요소를 버킷 사이에 적절히 분산시킨다고 가정할 때 기본 연산(get 및 put)에 대해 O(1) 시간 성능을 제공합니다. 그러나, 자연 순서 또는 사용자 정의 비교자를 기반으로 정렬이 필요한 경우, 삽입 및 조회에 O(log n) 시간이 걸리는 TreeMap이 가장 적합합니다.

Map이 도입되기 전에는 보통 키와 값에 대한 두 개의 평행 배열이나 효율성이 떨어지는 사용자 정의 데이터 구조를 사용하여 연관 배열을 구현했습니다. Map과 그 구현에 대한 현재 대안으로는 값을 효율적으로 찾기 위해 키가 필요한 경우에 사용할 수 있는 양방향 맵(BiMap in Google’s Guava library)과 같은 전문 맵을 제공하는 타사 라이브러리가 포함될 수 있습니다. 그러나 Java의 대부분의 사용 사례에서는 표준 라이브러리의 맵이 태스크를 처리하기에 충분히 강력하고 유연합니다.