-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathHashTable.java
More file actions
120 lines (92 loc) · 3.18 KB
/
HashTable.java
File metadata and controls
120 lines (92 loc) · 3.18 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package data.structures;
public class HashTable {
Entry[] entries;
private int size;
private final Entry NIL = new Entry(null, null);
HashTable(int length){
entries = new Entry[length];
}
HashTable(){
this(11);
}
private class Entry{
Object key, value;
Entry(Object key, Object value){
this.key = key;
this.value = value;
}
}
private int hash(Object key){
return (key.hashCode() & 0x7FFFFFFF) % entries.length;
}
public int size() {
return size;
}
public void put(Object key, Object value) {
if(size > 0.7F * entries.length)
rehash();
int h = hash(key);
for (int i = 0; i < entries.length; i++) {
int j = (i+h) % entries.length;
if(entries[j] == null || entries[j] == NIL){
entries[j] = new Entry(key, value);
size++; break;
}
}
}
private void rehash(){
Entry[] oldEntries = entries;
entries = new Entry[2*oldEntries.length+1];
for (Entry entry : oldEntries) {
if(entry == null || entry == NIL) continue;
int h = hash(entry.key);
for (int j = 0; j < entries.length; j++) {
int k = (h+j) % entries.length;
if(entries[k] == null){
entries[k] = entry;
break;
}
}
}
}
public Object get(Object key) {
int h = hash(key);
for (int i = 0; i < entries.length; i++) {
int j = (h+i) % entries.length;
if(entries[j] == null) break;
if(entries[j] == NIL) continue;
if(entries[j].key.equals(key))
return entries[j].value;
}
return null;
}
public Object remove(Object key) {
int h = hash(key);
for (int i = 0; i < entries.length; i++) {
int j = (i+h) % entries.length;
if(entries[j] == null) break;
if(entries[j].key.equals(key)){
Object value = entries[j].value;
entries[j] = NIL;
size--;
return value;
}
}
return null;
}
public static void main(String[] args) {
HashTable tableHash = new HashTable();
tableHash.put("PK", "Pakistan");
tableHash.put("IND", "India");
tableHash.put("USA", "America");
tableHash.put("GB", "United Kingdom");
tableHash.remove("GB");
tableHash.put("PT", "Portugual");
System.out.println(tableHash.get("PK"));
System.out.println(tableHash.get("IND"));
System.out.println(tableHash.get("USA"));
System.out.println(tableHash.get("GB"));
System.out.println(tableHash.get("PT"));
System.out.println("Size: " + tableHash.size());
}
}