키와 값으로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조
1. 저장
기존 키가 있는데 저장한다면? 기존 값이 없어지고 새 값으로 대체!
2. 자료 검색 속도의 이점
해시맵의 이름대로 해싱을 사용하기 때문에 데이터양이 많을 시 검색하기에 용이하다!
무조건 배열에서 원소를 찾는 속도보다 빠르다고 생각하면 된다!
그 이유는 해시맵은 키를 찾으면 그 키와 쌍을 이루는 값이 바로 나오기 때문에 시간복잡도 측면에서 O(1)이 되기 때문이다!
3. 단점
해시기법을 적용하기 위해 자바 내부적으로 .hashCode()
메소드를 사용하게 되고 이 때 중복이 발생할 수 있다!
이를 해결하기 위해서 자바에서는 seperate chanining을 사용했다!
이 방식을 중복될 거 같으면 연결리스트로 쭉 이어가는 방식이다!
각 index에 데이터를 저장하는 Linked list에 대한 포인터를 가지는 방식으로 충돌 발생 시 그 index가 가리키고 있는 연결 리스트에 노드를 추가하여 값을 넣음!
이 외에도 Key,Value,Bucket(키,값을 담는 전체적 틀)을 저장하니 공간복잡도 측면에서 배열보다는 안 좋을 수 있다
4.이런 경우는 배열쓰자!
HashMap<Integer,String> map = new HashMap<>()
키는 정수 타입, 값은 문자열 타입의 맵을 생성할게
map.put(1,"오늘의 1등");
map.remove(1)//키가 1인 것만 지우기
map.clear() //map 싹 다 비우기
전체 출력
System.out.println(map);
전체 출력(2)
for(Integer i : map.keySet()){
System.out.println("[Key]:" + i + " [Value]:" + map.get(i));
}
map에서 키를 하나씩 뽑고, 뽑은 키에 해당하는 값을 출력!
map.containsKey(1)
System.out.println(map.get(1));