// Hash Map : HashMap<K, V>
// Key : 무조건 String으로 생각하자!!!
// Value : 내가 넣고싶은대로.
##HashMap:
// - 해시 함수를 사용하여 각 키를 해시 코드로 변환하고, 이 해시 코드를 이용하여 데이터를 저장하고 검색함
// - 이를 통해 매우 빠른 검색 속도(O(1))를 제공할 수 있음
# 특징:
//
// 1. 키-값 쌍 (Key-Value Pair): HashMap은 키와 값의 쌍으로 데이터를 저장합니다.
// --> 키(key)는 중복되지 않으며, 각 키에 대응하는 값(value)을 저장합니다.
//
// 2. 해시 함수 (Hash Function): 키를 해시 코드로 변환하는 함수
// --> 해시 맵 내부에서 데이터를 저장하고 검색할 때 사용됩니다.
//
// 3. 버킷 (Bucket): 해시 맵 내부에서 데이터를 저장하는 공간입니다.
// --> 각 버킷에는 하나 이상의 키-값 쌍이 저장될 수 있습니다.
//
// 4. 로드 팩터 (Load Factor): 해시 맵의 용량을 조절하는 역할을 합니다.
// --> 로드 팩터를 기반으로 해시 맵의 크기가 동적으로 조정됩니다.
/# 조건:
//
// 1. y=f(x) : x를 넣으면 y가 나와야한다
//
// 2. 단방향 알고리즘(= 복호화 불가) : y=f(x)에서 x를 넣으면 y를 알 수 있지만, y로 인해 x를 알 수는 없어야함
// --> 나는 내계좌 비번을 알지만, 은행원은 내 계좌번호를 알 수가 없다구
// --> ex) x = 1234, f(x) = a+b+c+d, y = 10 일때 x가 뭔지 정확히 알 수는 없지?
//
// 3. 아무리 큰 데이터를 입력해도 특정범위의 값이 나와야함: x에 뭘넣든 y는 나오니까!
/# 해시 충돌(Hash Collision
// 해시 함수가 서로 다른 입력값에 대해 동일한 해시 값(해시 코드 또는 다이제스트)을 생성할 때 발생하는 현상
// --> 즉, 두 개 이상의 서로 다른 데이터가 동일한 해시 값으로 매핑되는 상황을 의미함
// --> 비트코인 채굴도 이 충돌발견하면 코인받고 그런거지뭐
## HashMap의 기본 동작:
// 1. put(key, value): 주어진 키와 값을 맵에 추가합니다.
// 2. get(key): 주어진 키에 해당하는 값을 반환합니다.
// 3. remove(key): 주어진 키에 해당하는 키-값 쌍을 맵에서 제거합니다.
// 4. containsKey(key): 주어진 키가 맵에 존재하는지 확인합니다.
// 5. keySet(): 맵에 있는 모든 키를 Set으로 반환합니다.
// 예시
// HashMap 생성
Map<String, Integer> hashMap = new HashMap<>();
// 키-값 쌍 추가
hashMap.put("Alice", 25);
hashMap.put("Bob", 30);
hashMap.put("Charlie", 28);
// 키를 기반으로 값을 가져오기
int age = hashMap.get("Alice");
System.out.println("Alice's age: " + age);
// 키-값 쌍 제거
hashMap.remove("Bob");
// 맵 순회
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
String name = entry.getKey();
int personAge = entry.getValue();
System.out.println(name + "'s age: " + personAge);
}
'JAVA > DAY 19 _ 23.09.12' 카테고리의 다른 글
자료구조 summary, 시간복잡도 (0) | 2023.09.12 |
---|---|
HashMap2 (0) | 2023.09.12 |
Set (0) | 2023.09.12 |
Queue (0) | 2023.09.12 |
(collection framework의) Stack (0) | 2023.09.12 |