Map은 키와 값으로 구성
Entry 객체를 저장하는 구조
HashMap<> map = new HashMap<>(); //type없음, Object 입력
HashMap<Integer, Integer> map1 = new HashMap<>(); //type 설정
HashMap<Integer, Integer> map2 = new HashMap<>(map1); //map1의 모든 값 복사
HashMap<Integer, Integer> map3 = new HashMap<>(10); //초기용량 지정
HashMap<Integer, Integer> map4 = new HashMap<>(10, 0.7f); //초기 capacity,load factor지정
//default capacity=16, load factor=0.75f
HashMap은 load factor가 임계치에 다다르면
hash Table은 rehash하게 되고 bucket 수를 2배 증가시킨다.
즉, 16이였던 bucket 수가 32로 증가한다.
쓸모없이 bucket 를 처음부터 많이 만들어 메모리를 낭비할 필요도 없이
bucket 수를 적게 가지고 시작하더라도 서서히 늘릴수 있다는 장점을 가지고 있다. (dynamic)
그러나 List처럼 공간을 한 칸씩 늘리지 않고 약 두배로 늘리기 때문에 과부하가 발생할 수 있다.
// entrySet()
for(Map.Entry<String, Object> entry : map.entrySet()){
System.out.println("key : " + entry.getKey() + " " + "value : " + entry.getValue());
}
// keySet()
for(String mapKey : map.keySet()){
System.out.println("key : " + mapKey + " " + "value : " + map.get(mapKey));
}
// entrySet().iterator()
Iterator<Map.Entry<String, Object>> entryIterator = map.entrySet().iterator();
while (entryIterator.hasNext()) {
Map.Entry<String, Object> entry = (Map.Entry<String, Object>) entryIterator.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println("key:" + key + " " + " value:" + value);
}
// keySet().iterator()
Iterator<String> keyIterator = map.keySet().iterator();
while (keyIterator.hasNext()) {
String key = keyIterator.next();
String value = map.get(key);
System.out.println("key :" + key + " " + " value:" + value);
}