HashMap
해싱된 Map을 뜻한다.
Map
- Key-Value쌍으로 데이터를 보관하는 자료구조
- Key는 맵에서 유일성을 가져야한다. 두 개 이상의 키가 존재하면 안 된다.
- Value는 중복된 값이어도 상관없다.
HashMap과 HashTable
- 공통점 : HashTable은 사용법이 거의 동일하다.
- 차이점 : HashTable은 Thread관점에서 안전하고, HashMap은 안전하지 않은 대신 속도가 빠르다.
대표 메소드
1. key, value 저장 put(key, value)
2. key, value 가져오기 get(key)
1
2
3
4
5
6
Map<String, Integer> myMap = new HashMap();
myMap.put("a", 10);
myMap.put("b", 20);
System.out.println(map); // {a=10, b=20}
System.out.println(map.get("a")); // 10
System.out.println(map.get("b")); // 20
3. 이미 key값이 존재하는지 확인하기 containsKey(key)
boolean결과값 나옴. 이미 존재하는 key이면 true.
4. key값이 존재하지 않는다면 값 넣기 putIfAbsent(key, value)
해당 key값이 없다면 해당 key에 value를 넣어준다.
5. 두 Map을 합치기 putAll(map)
- key, value의 자료형이 같은 map이어야 한다.
1
2
3
4
5
6
7
8
Map<String, Integer> myMap1 = new HashMap();
myMap1.put("a", 10);
myMap1.put("b", 20);
Map<String, Integer> myMap2 = new HashMap();
myMap2.put("c", 30);
myMap2.put("d", 40);
myMap2.putAll(myMap1);
System.out.println(map); // {a=10, b=20, c=30, d=40}
- 생성과 동시에 map데이터를 전부 넣기 : 인자로 전달하면 된다.
1
Map<String,Integer> myMap3=new HashMap(myMap1);
6. 모든 key를 순회하기 keySet()
- list처럼 index를 사용하는 방법은 없다.
- keySet메소드로 키를 Set으로 넘겨주어 Map에 존재하는 모든 키를 순회할 수 있다.
1 2 3 4 5 6 7 8 9 10 11
Map<String, Integer> myMap1 = new HashMap(); myMap1.put("a", 10); myMap1.put("b", 20); for (String key: myMap1.keySet()) { System.out.println(key); System.out.println(myMap1.get(key)); } // a // 10 // b // 20
7. 모든 key, value 순회하기 forEach()
1
2
3
4
5
6
7
8
9
10
11
Map<String, Integer> myMap1 = new HashMap();
myMap1.put("a", 10);
myMap1.put("b", 20);
myMap1.forEach((key, value) -> {
System.out.println(key);
System.out.println(value);
})
// a
// 10
// b
// 20
8. 내가 만든 객체를 key로 사용할 수도 있다.
- key에 들어간 객체가 같은 값인지 아닌지 판별하는 방법 :
hashCode()
오버라이딩 하기
hashCode
- 각 객체가 갖는 유일한 값(code)을 의미
- Object의 hashCode()는 원래 주소값에 의한 hashCode() -> 각 객체가 전부 다른 값을 가진다.
- HashMap은 우선 hashCode를 비교한 뒤, 같을 때만 equals를 수행하여 정말로 같은 것인지 판별한다.
reference
[COLLECTION] 이것만 알면 해시맵(HASHMAP) 정복 가능 - HASHMAP의 특징, 사용법 예제