1. HashMap이란?
: Map 인터페이스를 구현한 대표적인 컬렉션 클래스다. 시간복잡도는 O(1).
1 -1. HashTable vs HashMap
: HashTable은 쉽게 말해 Old 버전. HashMap은 새로운 버전.
- 공통점 : HashTable 과 HashMap은 모두 Map 인터페이스를 구현했으며, 데이터를 키와 값의 쌍으로 저장한다(key, value). 또한 저장 순서를 유지하지 않는다. 키는 중복을 허용하지않지만 값은 중복을 허용한다.
- 차이점 : 동기화의 유무. HashTable은 동기화가 되어있으나, HashMap은 동기화가 되어있지 않다.
1-2. HashMap 과 LinkedHashMap
: HashMap은 저장 순서를 유지하지 않는다. 하지만 저장 순서를 유지해야하는 상황이라면 LinkedHashMap을 사용하면 된다. 연결을 통해서 순서를 유지하는 방식이다.
1-3. TreeMap
: TreeMap은 TreeSet과 거의 비슷( TreeSet이 TreeMap을 가지고 만듦)하여 같은 특성을 갖는다. 범위 검색하고 정렬에 유리한 컬랙션 클래스이다. HashMap보다 데이터 추가, 삭제하는 데에 시간이 더 걸리는데 이는 비교해가면서 저장하기 때문이다.
2. MashMap 선언과 주요 함수들
2-1. HashMap의 Key와 Value
- Key : 컬랙션 내의 키 중에서 유일해야 한다.
- Value : key와 달리 데이터의 중복을 허용 한다.
2-2. HashMap 선언
HashMap<String, Integer> map = new HashMap<>();
2-3. HashMap 특정 데이터 저장 및 불러오기 함수 put() & get() & getOrDefault()
// 데이터 저장 put()
map.put("apple", 1000);
map.put("banana", 1500);
map.put("strawberry", 2000);
// 데이터 불러오기 get()
map.get("apple") // 1000
map.get("banana") // 1500
map.get("strawberry") // 2000
// 데이터가 없는 경우를 따지는 getOrDefault()
map.getOrDefault("apple", 0) // 1000
map.getOrDefault("peach", 0) // 0
2-4. HashMap 전체 데이터 불러오기 : for문 이용한 세가지 방식(keySet(), entrySet(), Iterator())
2-4-1. keySet 방법
for(Char c: map.keySet()) {
System.out.print("key : " + c + "value : " + map.get(key));
}
2-4-2. entrySet 방법
for(Map.Entry<Character, Integer> element : map.entrySet()) {
System.out.print("key : " + element.getKey() + "value : " + element.getValue());
}
2-4-3.Iterator 방법
Interator<String> keys = map.keySet().interator();
while(keys.hasNext()){
Integer key = keyts.next();
System.out.print("key : " + key);
}
2-5. HashMap 안에 해당하는 키와 값이 존재하는지 여부를 알려주는 containsKey() & containsValue()
// boolean containsKey(Object key)
map.containsKey("apple"); // true
map.containsKey("pear"); // false
// boolean containsValue(Object key)
map.containsValue(2000); // true
map.containsValue(500); //false
2-6. HashMap의 크기를 알려주는 size()
// int size()
map.size(); // 3
2-7. HashMap 내의 특정 데이터를 삭제하는 remove()와 전체를 삭제하는 clear()
// remove(Object key)
map.remove("apple"); // 데이터 ("apple", 1000) 삭제
// void clear()
map.clear(); // map will be empty.
*시험에 자주 나오는 Map 형태
1) Map+String(getOrDefault()) ⭐⭐
2) Map+Array ⭐
3) Map+Math.max ⭐
4) Map+Set
5) Map+Map
6) Set+Set