//1. put
myMap.put("Korean", 90);
myMap.put("Math", 80);
myMap.put("English", 87);
myMap.put("Science", 90);
System.out.println(myMap.toString()); //{English=87, Science=90, Korean=90, Math=80}
myMap.put("English", 95);
System.out.println(myMap.toString()); //{English=95, Science=90, Korean=90, Math=80}
//2. remove
myMap.remove("English");
System.out.println(myMap.toString()); //{Science=90, Korean=90, Math=80}
//3. get
System.out.println(myMap.get("Korean")); //90
//4. size
System.out.println(myMap.size()); //3
//5. contains
System.out.println(myMap.containsKey("Math")); //true
System.out.println(myMap.containsKey("English")); //false
System.out.println(myMap.containsValue(90)); //true
//6. keySet, Values
System.out.println(myMap.keySet()); //[Science, Korean, Math]
System.out.println(myMap.values()); //[90, 90, 80]
//7. forEach
for(String subject: myMap.keySet()) {
System.out.println(subject); //Science, ...
}
Map 안에 값을 넣기 위해서는 put을 사용합니다. 선언부에서 정의했던 자료형의 쌍을 집어넣게 되는데, HashSet에서처럼 작성한 코드의 순서와는 상관없이 값이 저장됩니다.
또한, 앞서 설명한듯이 key값은 중복이 불가능합니다. 예시 코드에서처럼 "English"라는 key에 새로운 value "95"를 넣게되면, 기존에 가지고 있던 값을 잃어버리고 새로운 값만 들어가게 됩니다.
마치 앞서 다룬 Set처럼 말이지요.
Map을 쉽게 이해하는 방법 중 하나는, key를 다른 자료구조에서의 index로 치환하여 생각하는 것입니다. 이를테면 ArrayList에서 값을 호출하기위해서는 remove(index의 번호)를 사용하는 것처럼 Map에서는 remove(key)가 되는 것이지요. remove의 결과로 해당 key와 value가 모두 지워지게 됩니다.
remove와 마찬가지로 get메서드 역시 index대신 key를 사용하여 value를 호출하게 됩니다. 어차피 하나의 Map에는 중복되는 key가 존재하지 않으므로, 고유한 key는 하나의 value만을 가지게 됩니다. 그럼 value를 사용하여 key를 호출할 수는 없을까요? Map에서는 key에 대한 중복을 허락하지 않지만, value는 같은 값을 가져도 상관없습니다. 따라서 역으로 key값을 반환하는 메서드는 존재하지 않습니다.
size메서드는 Map의 크기를 int Type으로 반환하는 메서드입니다.
이전의 다른 자료구조의 설명에서도 contains는 다룬적이 많이 있습니다. 차이점이 있다면, Map의 key와 value에 각각 따로 containsKey와 containsValue라는 메서드가 구현되어 있다는 점입니다. 상황에 맞게 사용하실 수 있습니다.
keySet은 Map이 가지고 있는 key를, Values는 Map이 가지고있는 value를 각각 반환합니다. 특히 keySet은 다음에 설명할 forEach 문과 함께 자주 사용하는 메서드이므로 익숙해 지는것이 좋습니다.
앞서 Set에서 잠시 다룬적이 있던 forEach문입니다. Set에서는 HashSet 전체를 루프돌며 반복문을 수행하였지만, 이번에는 keySet()의 결과인 key의 집합을 돌면서 수행하게 됩니다. 여기서 key의 Type에 맞추어 StringType의 key를 임시로 subject라고 부르기로 정의했습니다. 그리고 루프를 돌면서 subject를 출력하도록 구현한 코드입니다.
위에서 설명했던 get()메서드와 함께 응용하면 이렇게 출력할 수도 있겠군요. key와 함께 value값을 출력해서 과목 당 점수를 함께 표시한 코드입니다.
for(String subject: myMap.keySet()) {
System.out.println(subject+" : "+myMap.get(subject)); //Science : 90, ...
}