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()를 자동으로 오버라이드(재정의) 해준다.