자료구조 및 알고리즘/Java
[java] Hash Map
Angry Stock
2023. 11. 28. 16:04
반응형
Java의 **HashMap**은 키-값 쌍을 저장하는 맵(map) 구현입니다. **HashMap**은 Map 인터페이스를 구현하며, 키와 값은 모두 객체입니다. 각 키는 고유해야 하며, 각 키는 하나의 값을 가집니다. **HashMap**은 해시 테이블을 사용하여 내부 데이터를 저장하며, 이는 대부분의 경우에 빠른 검색, 삽입, 삭제 연산을 가능하게 합니다.
HashMap의 주요 특징
- 키의 고유성: 같은 키로 여러 값을 저장하려고 하면, 마지막에 저장된 값으로 덮어씁니다.
- 순서 보장 없음: **HashMap**은 요소의 순서를 보장하지 않습니다.
- null 값: **HashMap**은 키와 값으로 **null**을 허용합니다.
- 동기화되지 않음: **HashMap**은 멀티스레드 환경에서 동기화를 보장하지 않습니다. 동기화가 필요한 경우 **Collections.synchronizedMap()**을 사용할 수 있습니다.
HashMap 사용 예제
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
// HashMap 생성
Map<String, Integer> map = new HashMap<>();
// 요소 추가
map.put("사과", 10);
map.put("바나나", 3);
map.put("체리", 5);
// 특정 키의 값 가져오기
int bananaCount = map.get("바나나");
System.out.println("바나나 수: " + bananaCount);
// 모든 요소 순회
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
// 특정 키의 요소 삭제
map.remove("체리");
// 키 존재 여부 확인
if (map.containsKey("사과")) {
System.out.println("사과가 있습니다.");
}
// 값 존재 여부 확인
if (map.containsValue(10)) {
System.out.println("값 10이 있습니다.");
}
}
}
밑의 코드 경우의 Map & HashMap의 차이점
HashMap<String, Object> map = new HashMap<String, Object>();
Map<String, Object> map = new HashMap<String, Object>();
- 첫번재 코드의 경우 map Object는 오직 HashMap에 대한 Object만을 담을 수 있어서 유지 보수성이 떨어진다.
- 두번째 코드의 경우 Map 인터페이스를 사용해서 다른 종류의 Map을 사용해야 하는 상황이 발생할 때 코드 수정필요 없이 손쉽게 이를 방영.
주요 메소드
- put(Key, Value): 키(Key)와 값을(Value) 매핑하여 해시맵에 추가합니다. 이미 해당 키가 존재하면 기존 값을 새 값으로 대체합니다.
- get(Object key): 지정된 키에 매핑된 값을 반환합니다. 키가 맵에 없는 경우 null을 반환합니다.
- remove(Object key): 지정된 키가 매핑된 항목을 해시맵에서 제거합니다. 해당 키가 맵에 있으면 해당 키와 값이 제거되고, 값이 반환됩니다.
- containsKey(Object key): 맵이 지정된 키를 포함하고 있는지 여부를 확인합니다. 포함하고 있으면 true, 그렇지 않으면 false를 반환합니다.
- containsValue(Object value): 맵이 지정된 값을 포함하고 있는지 여부를 확인합니다. 포함하고 있으면 true, 그렇지 않으면 false를 반환합니다.
- size(): 맵에 있는 키-값 쌍의 개수를 반환합니다.
- isEmpty(): 맵이 비어 있는지 여부를 확인합니다. 비어 있으면 true, 그렇지 않으면 false를 반환합니다.
- clear(): 맵에서 모든 매핑을 제거합니다.
- keySet(): 맵의 키 집합을 반환합니다. 이 집합은 맵의 뷰이므로, 맵의 변경이 이 집합에 반영됩니다.
- values(): 맵의 값 컬렉션을 반환합니다. 이 컬렉션은 맵의 뷰이므로, 맵의 변경이 이 컬렉션에 반영됩니다.
- entrySet(): 맵의 키-값 쌍을 포함하는 집합을 반환합니다. 이 집합은 맵의 뷰이므로, 맵의 변경이 이 집합에 반영됩니다.
반응형