저장과 검색 등에서 자주 활용되는 자료구조
Hash: 입력데이터를 고정된 길이의 데이터로 변환된 값
Ex) Key(1232434) ⇒ 해시 함수 ⇒ 해시값(nnn)
해시 값은 해시 함수에 의해서 얻게 됨 데이터의 key 값이 함수를 통해서 변환된 간단한 정수
정수로 변환된 해시는 배열의 인덱스, 위치, 데이터 값을 저장하거나 할 때 활용
문자열, 빈도수, 중복 검사 ⇒ 보통 해시를 활용
key → value 형태의 저장
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 3); //해시에 데이터 삽입
map.put("banana", 5);
map.get("apple"); //3 -> 키 값으로 value 가져오기 없으면 null
map.remove(key); // 키로 삭제
map.getOrDefault(key, 기본값) // key가 있으면 value 가져오고 아니면 기본값
map.containsKey("apple") // 키 존재 여부 확인
map.keySet(); // 모든 key값 HashSet으로 가져옴
map.values(); // 모든 value 가져오
map.size(); //개수 확인
map.entrySet(); // key와 value 동시에 순회
ex)
for(Map.Entry(String, Integer> entry : map.entrySet()) {
entry.getKey() //키출력
entry.getValue() //value 출력
}
중복 없는 데이터 저장
HashSet<Integer> set = new HashSet<>();
set.add(1); // 해시셋에 데이터 저장(중복 불가)
set.add(2);
set.add(1);
set의 결과 => 1, 2 //중복을 자동으로 제거
set.contains(value); // 값이 있는지 확인 boolean으로 return
set.remove(value); // 해시셋에서 데이터 삭제
set.size(); // 해시 개수 확인
HashSet은 인덱스가 없음
for(int num : set) { //for-each , iterator도 가능은
이런 반복 방식으로 순
}
// 배열에 있는 반복을 제거 하고 싶다면?
for(int num : arr) {
set.add(num) // 중복이 제거되며 저
}
// 두배열의 교집합
for(int num : arr1) {
set.add(num)
}
for(int num : arr2) {
if(set.contains(num){}
}
빈도 수 세기
arr = apple, banana, apple, orange, apple
HashMap<String, Integer> map = new HashMap<>();
for(String s : arr) {
map.put(s, map.getDefault(s,0)+1);
}