Java & Spring

[Java] HashMap

ju_young 2023. 10. 19. 12:36
728x90

Map?

  • 키(key)와 값(value)으로 구성된 Entry 객체를 저장하는 구조
  • key와 value는 모두 객체
  • key는 중복 저장될 수 없으며 value는 중복 저장 가능
  • Map 컬렉션에는 HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등이 있음

Map의 공통 메소드

메소드 설명
put(key, value) 주어진 키로 값을 저장하며 새로운 키일 경우 null을 반환하고 동일한 키가 있을 경우 값을 대체하고 이전 값을 리턴
containsKey(key) 주어진 키가 있는지 여부
containsValue(value) 주어진 값이 있는지 여부
entrySet() 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아 반환
get(key) 주어진 키가 있는 값을 반환
isEmpty() 비어있는지 여부
keySet() 모든 키를 Set 객체에 담아 반환
size() 저장된 키의 총 개수를 반환
values() 저장된 모든 값을 Collection에 담아 반환
clear() 모든 Map.Entry 삭제
remove(key) 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 반환

HashMap

  • Map 인터페이스를 구현한 대표적인 Map Collection
  • HashMap의 키로 사용할 객체는 hashcode()와 equals() 메소드를 재정의

hashcode()의 반환값이 같아야하고 equals()가 true를 반환해야한다.

HashMap 사용 예시

  • Student를 키, 점수를 값으로 저장하는 HashMap을 구현
  • 학번과 이름이 동일한 Student를 동등 키로 판단하기 위해 hashCode(), equals() 메소드를 재정의
class Student {  
    public int sno;  
    public String name;  

    public Student(int sno, String name) {  
        this.sno = sno;  
        this.name = name;  
    }  

    //hashCode(), equals() 메소드를 재정의
    public boolean equals(Object o) {  
        if (o instanceof Student) {  
            Student student = (Student) o;  
            return (sno  student.sno) && (name.equals(student.name));  
        } else {  
            return false;  
        }  
    }  

    public int hashCode() {  
        return sno + name.hashCode();  
    }  
}
  • hashCode(), equals() 메소드를 재정의함으로써 아래와 같이 키와 값을 넣어도 새로운 키가 아닌 동등키로 인식하여 값이 대체됨
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Map<Student, Integer> map = new HashMap<Student, Integer>();

        map.put(new Student(1, "Jade"), 100);
        map.put(new Student(1, "Jade"), 100);
    }
}

intellij에서는 Generate 기능을 사용하여 hashCode(), equals()를 자동으로 오버라이드(재정의) 해준다.

728x90