-
Notifications
You must be signed in to change notification settings - Fork 0
/
MyHashTableLinearProbing.java
86 lines (73 loc) · 1.79 KB
/
MyHashTableLinearProbing.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import java.util.*;
@SuppressWarnings("unchecked")
class MyHashTableLinearProbing<K, V> {
Node<K, V>[] nodeObj;
private K key;
private V value;
private int size;
private int indexCount;
MyHashTableLinearProbing(int size) {
this.size = size;
indexCount = 0;
nodeObj = new Node[size];
}
public void insertElement(K key, V value) {
int hashCode = hashFunction(key);
if(nodeObj[hashCode] == null) {
nodeObj[hashCode] = new Node(key,value);
} else {
for(int i = (hashCode + 1) % size; i < size; i++) {
if(nodeObj[i] == null) {
nodeObj[i] = new Node(key,value);
break;
}
}
}
}
public int hashFunction(K dkey) {
String hashstr = dkey.toString();
int hashCode = 0;
for(int i = 0; i < hashstr.length(); i++) {
int code = (int)hashstr.charAt(i) * 32^i;
hashCode = hashCode + code;
}
hashCode = hashCode % size;
// System.out.println(hashCode);
return hashCode;
}
public void removeElement(K key) {
int hashCode = hashFunction(key);
if(nodeObj[hashCode].getKey() == key) {
nodeObj[hashCode] = null;
} else {
for(int i = (hashCode + 1) % size; i < size; i++) {
if (nodeObj[i] != null){
hashCode = hashFunction(nodeObj[i].getKey());
if(nodeObj[i].getKey() == key) {
if(nodeObj[hashCode] == null) {
nodeObj[hashCode] = nodeObj[i];
}
}
}
}
}
}
public void print(){
for(int i = 0; i < size; i++) {
if(nodeObj[i] != null) {
if (nodeObj[i].getNextKey() == null)
System.out.print(i + " : " +nodeObj[i].getKey());
else{
Node temp = nodeObj[i];
System.out.print(temp.getKey());
while(temp != null) {
temp = temp.getNextKey();
if(temp!= null)
System.out.print( " --> " + temp.getKey());
}
}
System.out.println();
}
}
}
}