: 문자열을 key로 문제를 풀어야 하는 경우 사용한다. - Map, Json
함수에서 리턴된 값을 가지고 배열에 접근 하기 때문에 속도가 O(1)이 나온다
Hash를 안쓰면 하나씩 모두 찾아야 해서 속도가 Max,Min과 같이 O(N)이 나온다.
public class HashFunction2 {
public int hash(String key) {
return 0;
}
}
public class HashFunction2 {
public int hash(String key) {
for (int i = 0; i < key.length(); i++) {
asciiSum += key.charAt(i);
}
return asciiSum % 90; //
}
생성자: public HashTable(int size)
public class HashTable {
private int size = 10000; // size 변수선언
public HashTable() { // 기본 생성자 주입
}
public HashTable(int size) { // 매개변수가 size인 생성자
this.size = size;
}
public int hash(String key) { // 만들었던 hash 함수
int asciiSum = 0;
for (int i = 0; i < key.length(); i++) {
asciiSum += key.charAt(i);
}
return asciiSum % size; // 나머지로 index를 만드는 이유?
}
}
String[] names = new String[]{"name1",
"name2", "name3", "name4"};
HashTable ht = new HashTable();
Set<Integer> nameSet = new HashSet<>();
for (int i = 0; i < names.length; i++) {
nameSet.add(ht.hash(names[i]));
}
System.out.printf("%s %s", names.length, nameSet.size());
public class HashTable {...}
public void insert(String key, Integer value) {
int hashCode = hash(key);
this.table[hashCode] = value;
System.out.println(key+ " " +hashCode + "방에 저장이 완료 되었습니다.");
}
this.table[hash(key)]
public int search(String key) {
return this.table[hash(key)];
}
위 코드까지는 작성은 하지만 틀린 값을 보여주고 있다. (위험한 상태) 그 이유는 해쉬 충돌 때문이다.
같은 hash값이 생성 되었을 때 어떻게 할 것인지? -> 내일