Java - HashMap

HashMap의 메소드

Posted by Yan on September 16, 2021

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의 특징, 사용법 예제