HashMap과 HashSet은 Java에서 두 가지 중요한 데이터 구조입니다.
HashMap:
HashMap은 키-값 쌍을 저장하는 데이터 구조입니다. 각 버킷은 키-값 쌍의 연결된 목록인 버킷 배열을 사용하여 구현됩니다. 키는 배열에 인덱싱하는 데 사용되며 값은 해당 연결 목록에 저장됩니다. HashMap은 요소를 추가, 제거 및 검색하기 위한 일정한 시간 복잡도를 제공합니다(좋은 해시 함수가 사용된다고 가정).
HashSet:
HashSet은 요소 집합(즉, 키-값 쌍이 아닌 값)을 저장하는 데이터 구조입니다. 값이 키이고 HashMap의 값이 모두 동일한 객체(예: null)로 설정되는 HashMap을 사용하여 구현됩니다. 이는 요소를 추가, 제거 및 검색하기 위한 일정한 시간 복잡성을 허용합니다(좋은 해시 함수가 사용된다고 가정).
주목해야 할 한 가지 중요한 점은 HashSet이 중복을 허용하지 않는다는 것입니다. HashSet에 요소를 추가할 때 먼저 해당 요소가 집합에 이미 존재하는지 확인합니다(해시 함수 사용). 요소가 이미 있으면 다시 추가되지 않습니다.
다음은 Java에서 HashMap 및 HashSet을 사용하는 예입니다.
import java.util.HashMap;
import java.util.HashSet;
public class HashMapHashSetExample {
public static void main(String[] args) {
// Example of using a HashMap
HashMap<String, Integer> map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
map.put("Charlie", 35);
int age = map.get("Bob"); // age = 30
// Example of using a HashSet
HashSet<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
boolean containsApple = set.contains("apple"); // true
boolean containsGrape = set.contains("grape"); // false
set.add("apple"); // adding duplicate element, but set size does not increase
int setSize = set.size(); // setSize = 3
}
}
이 예제에서는 HashMap을 만들어 세 사람의 나이를 저장합니다. 세 개의 키-값 쌍을 맵에 추가한 다음 "get" 메서드를 사용하여 Bob의 나이를 검색합니다. 그런 다음 세 가지 과일을 저장할 HashSet을 만듭니다. 세트에 3개의 요소를 추가한 다음 세트에 "사과"와 "포도"가 포함되어 있는지 확인합니다. 또한 세트에 "사과"를 다시 추가하지만(복제) 세트의 크기는 증가하지 않습니다.