이중해시맵
: 키-값 쌍을 저장하는 해시맵이 또 다른 해시맵을 값으로 가지는 구조.
특정 키에 대한 다중 값을 관리하는 데 유용함.
자바에서는 HashMap 클래스를 사용하여 이중 해시맵을 구현할 수 있음.
해시맵과 비교
//해시맵
Map<String, Integer> studentScores = new HashMap<>();
studentScores.put("Alice", 90);
studentScores.put("Bob", 75);
//이중해시맵
Map<String, Map<String, Integer>> studentGrades = new HashMap<>();
Map<String, Integer> aliceGrades = new HashMap<>();
aliceGrades.put("Math", 90);
aliceGrades.put("Science", 85);
Map<String, Integer> bobGrades = new HashMap<>();
bobGrades.put("Math", 75);
bobGrades.put("Science", 80);
studentGrades.put("Alice", aliceGrades);
studentGrades.put("Bob", bobGrades);
studentScores
Key | Value |
Alice | 90 |
Bob | 75 |
studentGrades
Key | Value |
Alice | { Math=90 , Science=85 } |
Bob | { Math=75, Science=80 } |
즉, 이중 HashMap의 Value가 Key와 Value로 구성되어있음.
해시맵 내부에 또 다른 해시맵을 값으로 가지는 구조이므로, 주로 2차원 데이터를 저장하거나 키와 관련된 여러 값을 그룹화할 때 유용함.
이중 해시맵 사용한 예시코드!
import java.util.HashMap;
import java.util.Map;
public class DoubleHashMapExample {
public static void main(String[] args) {
// 이중 해시맵 생성해 학생들 성적을 추가함
Map<String, Map<String, Integer>> studentGrades = new HashMap<>();
addGrade(studentGrades, "Alice", "Math", 90);
addGrade(studentGrades, "Alice", "Science", 85);
addGrade(studentGrades, "Bob", "Math", 75);
addGrade(studentGrades, "Bob", "Science", 80);
printGrades(studentGrades);
// 특정 학생의 특정 과목 성적 조회
int aliceMathGrade = getGrade(studentGrades, "Alice", "Math");
System.out.println("Alice's Math grade: " + aliceMathGrade);
}
// 성적 추가 메소드
public static void addGrade(Map<String, Map<String, Integer>> studentGrades,
String studentName, String subject, int grade) {
studentGrades
.computeIfAbsent(studentName, k -> new HashMap<>())
.put(subject, grade);
}
// 성적 조회 메소드
public static int getGrade(Map<String, Map<String, Integer>> studentGrades,
String studentName, String subject) {
return studentGrades
.getOrDefault(studentName, new HashMap<>())
.getOrDefault(subject, 0);
}
// 성적 출력 메소드
public static void printGrades(Map<String, Map<String, Integer>> studentGrades) {
for (String student : studentGrades.keySet()) {
System.out.println("Grades for " + student + ":");
Map<String, Integer> grades = studentGrades.get(student);
for (String subject : grades.keySet()) {
System.out.println(" " + subject + ": " + grades.get(subject));
}
}
}
}
studentGrades라는 이중 해시맵의 첫 번째 키는 학생의 이름, 두 번째 키는 과목 이름, 값은 성적.
성적 추가 메소드 : 주어진 학생 이름이 없으면 새로운 해시맵을 생성하고, 과목 이름과 성적을 추가
성적 조회 메소드: 주어진 학생의 특정 과목 성적을 조회. 해당 학생이나 과목이 없으면 기본값 0을 반환
성적 출력 메소드 : 모든 학생의 성적 출력.
반응형
'Chapter01 > Java' 카테고리의 다른 글
[ java ] 객체지향 개발 SOLID 5대 원리 + 예시코드 (0) | 2024.03.13 |
---|---|
[ Java ] 클래스 정의 (0) | 2024.03.13 |
[ Java ] Overloading 개념 + 예시코드 (0) | 2023.11.07 |