Java의 HashMap 자료구조에서 하나의 key에 두 개의 value를 저장하려는 상황에서는 두 가지 방법을 고려할 수 있습니다.
HashMap<Integer, List<Integer>> map = new HashMap<>();
List<Integer> values = new ArrayList<>();
values.add(10); // value1
values.add(20); // value2
map.put(1, values);
// Accessing values
List<Integer> retrievedValues = map.get(1);
int value1 = retrievedValues.get(0);
int value2 = retrievedValues.get(1);
장점
단순성: List를 사용하면 구조가 단순하며, 값이 두 개뿐일 때 List의 크기가 고정되므로 쉽게 값을 관리할 수 있습니다.
사용 용이성: 값을 추가하거나 접근할 때의 코드가 직관적이고 간단합니다.
단점
고정된 크기 문제: 값이 두 개로 고정되어 있으므로, 이를 강제하거나 값을 읽을 때 항상 두 개를 고려해야 합니다. 잘못된 접근 시 IndexOutOfBoundsException
이 발생할 수 있습니다.
가독성 저하: 값을 읽을 때 List의 각 인덱스가 의미하는 바를 명시적으로 표현하기 어렵습니다.
HashMap<Integer, HashMap<String, Integer>> map = new HashMap<>();
HashMap<String, Integer> values = new HashMap<>();
values.put("value1", 10);
values.put("value2", 20);
map.put(1, values);
// Accessing values
HashMap<String, Integer> retrievedValues = map.get(1);
int value1 = retrievedValues.get("value1");
int value2 = retrievedValues.get("value2");
장점
명확한 구조: 내부 HashMap의 key를 사용하여 값의 의미를 명확히 할 수 있습니다.
예를 들어, "value1"과 "value2"를 사용하여 두 값을 구분할 수 있습니다.
유연성: 값이 두 개 이상으로 늘어나더라도 쉽게 확장할 수 있습니다.
단점
복잡성 증가: 중첩된 구조로 인해 코드가 다소 복잡해지고, 값을 추가하거나 접근할 때 더 많은 코드가 필요합니다.
성능 부담: HashMap을 중첩해서 사용할 경우, 메모리 사용량이 증가할 수 있으며, 값에 접근할 때 추가적인 해시 연산이 필요합니다.
두 값이 항상 존재하고, 그 의미가 명확하며, 코드를 간결하게 유지하고 싶다면 List
를 사용하는 것이 좋습니다.
하지만 값의 의미를 명확히 표현하고 유연한 구조를 원한다면 중첩 HashMap
을 사용하는 것이 더 적합합니다.