본문 바로가기
Backend/알고리즘

자료구조 - HashMap

by 박상윤 2024. 2. 24.

HashMap 이란?

- Map 인터페이스를 구현한 대표적인 Map 컬렉션이다.

- Map 인터페이스를 상속하고 있어서 Map의 성질을 그대로 가지고 있다.

- Map은 키와 값으로 구성된 Entry 객체를 저장하는 구조를 갖는다. 키와 값은 모두 객체이다.

- 값은 중복 저장될 수 있지만, 키는 중복 저장될 수 없다.

- 기존에 저장된 키와 동일한 키로 값을 저장할시, 기존의 값은 없어지고 새로운 값으로 대체된다.

- 해싱(Hashing)을 사용하므로 많은 양의 데이터 검색에 있어 뛰어난 성능을 보인다.

- 해시 함수를 통해 키와 값이 저장되는 위치를 결정하므로, 사용자는 그 위치를 알 수 없고, 삽입되는 순서와 들어 있는 위치 또한 관계가 없다.

 

📌 HashMap 사용하기

HashMap<String,String> map1 = new HashMap<String,String>();//HashMap생성
HashMap<String,String> map2 = new HashMap<>();//new에서 타입 파라미터 생략가능
HashMap<String,String> map3 = new HashMap<>(map1);//map1의 모든 값을 가진 HashMap생성
HashMap<String,String> map4 = new HashMap<>(10);//초기 용량(capacity)지정
HashMap<String,String> map5 = new HashMap<>(10, 0.1f);//초기 capacity,load factor지정
HashMap<String,String> map6 = new HashMap<String,String>(){{//초기값 지정
    put("a","b");
}};

 

 

📌 HashMap 값 추가

HashMap<Integer,String> map = new HashMap<>();//new에서 타입 파라미터 생략가능
map.put(1,"가"); //값 추가
map.put(2,"나");
map.put(3,"다");

 

HashMap에 값을 추가하려면 put(key,value) 메소드를 사용하면 된다.

 

📌 HashMap 값 삭제

HashMap<Integer,String> map = new HashMap<Integer,String>(){{//초기값 지정
    put(1,"가");
    put(2,"나");
    put(3,"다");
}};
map.remove(1); //key값 1 제거
map.clear(); //모든 값 제거

 

 

📌 HashMap 값 출력

HashMap<Integer,String> map = new HashMap<Integer,String>(){{//초기값 지정
    put(1,"가");
    put(2,"나");
    put(3,"다");
}};
		
System.out.println(map); //전체 출력 : {1=가, 2=나, 3=다}
System.out.println(map.get(1));//key값 1의 value얻기 : 
		
//entrySet() 활용
for (Entry<Integer, String> entry : map.entrySet()) {
    System.out.println("Key:" + entry.getKey() + " Value:" + entry.getValue());
}
//Key:1 Value:가
//Key:2 Value:나
//Key:3 Value:다

//KeySet() 활용
for(Integer i : map.keySet()){ //저장된 key값 확인
    System.out.println("Key:" + i + " Value:" + map.get(i));
}
//Key:1 Value:가
//Key:2 Value:나
//Key:3 Value:다

 

많은 양의 데이터를 가져와야 하는 경우 entrySet()을 사용하면 좋다.

 

📌 Iterator 사용

HashMap<Integer,String> map = new HashMap<Integer,String>(){{//초기값 지정
    put(1,"가");
    put(2,"나");
    put(3,"");
}};
		
//entrySet().iterator()
Iterator<Entry<Integer, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
    Map.Entry<Integer, String> entry = entries.next();
    System.out.println("Key:" + entry.getKey() + " Value:" +  entry.getValue());
}
// Key:1  Value:가
// Key:2  Value:나
// Key:3  Value:다
		
//keySet().iterator()
Iterator<Integer> keys = map.keySet().iterator();
while(keys.hasNext()){
    int key = keys.next();
    System.out.println("Key:" + key + " Value:" +  map.get(key));
}
// Key:1  Value:가 
// Key:2  Value:나
// Key:3  Value :다

 

 

HashTable vs HashMap

https://devlog-wjdrbs96.tistory.com/253

 

[Java] HashMap vs Hashtable 차이는 무엇일까?

Hashtable 이란? Hashtable 클래스는 컬렉션 프레임웍이 만들어지기 이전부터 존재하던 것이기 때문에 컬렉션 프레임워의 명명법을 따르지 않습니다. Vector나 Hashtable과 같은 기존의 컬렉션 클래스들

devlog-wjdrbs96.tistory.com

 

'Backend > 알고리즘' 카테고리의 다른 글

자료구조 - 힙  (0) 2024.02.26
자료구조 - Linked List  (2) 2024.02.24
자료구조 - 배열  (0) 2024.02.23
[백준] 2343번 - 기타레슨  (1) 2023.12.08
[백준] 2729번 - 보석상자  (0) 2023.12.08