Map은 파이썬의 딕셔너리와 비슷한 자바 컬렉션 중 하나이다.
키와 값을 함께 저장하기 위해 만들어졌으며, Key는 중복으로 저장할 수 없다.
주의할 점은 기존에 등록되어있던 Key를 재 등록하게 되면,
가장 나중에 등록한 Key와 Value값으로 대치된다.
HashMap은 Map 인터페이스를 구현해 Map의 기능을 사용할 수 있으며
해싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서
뛰어난 성능을 보인다.
//선언 및 생성
Map<String, Integer> intMap = new HashMap<>();
//값 추가
intMap.put("가", 1);
// Key 값 전체 출력
for (String key : intMap.keyset()) {
System.out.println(key);
}
// value 값 전체 출력
for (Integer value : intMap.values()) {
System.out.println(value);
}
// 값 가져오기
System.out.println(intMap.get("가)); // 출력값 : 1
이전에 연습했던 HashMap 코드
package chap_09;
import java.util.HashMap;
public class _07_HashMap {
public static void main(String[] args) {
// Map (Key, Value)
// 순서 보장이 필요할 시 LinkedHashMap<>() 사용
HashMap<String, Integer> map = new HashMap<>();
// 데이터 추가
map.put("유재석", 10);
map.put("박명수", 5);
map.put("김종국", 3);
System.out.println("총 고객 수 :" + map.size());
System.out.println("------------------");
// 조회
System.out.println("유재석 님의 포인트 : " + map.get("유재석")); // 10
System.out.println("유재석 님의 포인트 : " + map.get("박명수")); // 10
// 확인
if (map.containsKey("서장훈")) {
int point = map.get ("서장훈"); map.put("서장훈", ++point);
System.out.println("서장훈 님의 누적 포인트 : " + map.get("서장훈"));
} else {
map.put("서장훈", 1);
System.out.println("서장훈님 신규 등록 (포인트 1)");
}
System.out.println("---------------------");
// 삭제
map.remove("유재석");
System.out.println(map.get("유재석")); //null
System.out.println("--------------------");
// 전체 삭제
map.clear();
if (map.isEmpty()) {
System.out.println("남은 고객 수 : " + map.size());
}
System.out.println("----------------------");
map.put("유재석", 10);
map.put("박명수", 5);
map.put("김종국", 3);
map.put("서장훈", 15);
// Key 확인
for (String key : map.keySet()) {
System.out.println(key); // 박명수, 유재석, 김종국, 서장훈 (순서 보장X)
}
System.out.println("-----------------");
// Value 확인
for (int value: map.values()) {
System.out.println(value); // 5, 15, 10, 15 (순서 보장 X)
}
System.out.println("------------");
// Key, Value 함께 확인
for (String key : map.keySet()) {
System.out.println("고객 이름 : " + key + "\t\n포인트 : " + map.get(key));
}
System.out.println("---------------------");
}
}
문제출처 : 프로그래머스
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String s) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("zero","0"); hashMap.put("one", "1");
hashMap.put("two", "2"); hashMap.put("three", "3");
hashMap.put("four", "4"); hashMap.put("five", "5");
hashMap.put("six", "6"); hashMap.put("seven", "7");
hashMap.put("eight", "8"); hashMap.put("nine", "9");
for(Map.Entry<String, String> entry : hashMap.entrySet()) {
if(s.contains(entry.getKey())) s = s.replace(entry.getKey(), entry.getValue());
}
return Integer.valueOf(s);
}
}
물론 Map없이 그냥 replace로 조건문 걸어서 해결하는 방법도 있었을 것이다.
하지만 기존에 알고 있던 것들만 쓰지 않고
새롭게 배워서 아직 익숙하지 않은 것들을 최대한 써보고 싶었다.
Map에 대해 Key값은 중복이 되지 않는다 등등의 기초적인 개념들은
알고 있다고 생각했는데,
실제로 사용하려고 보니 정말 많은 부분들을 모르고 있었다.
오늘은 클래스 복습과 더불어
Map과 HashMap의 차이점과 사용 방법 등을 검색해보고,
사용해보면서 점차 익혀나가는 시간을 가졌다.