import
java.util.LinkedList;
class
Node<T> {
String key;
T value;
Node<T> next;
Node(String key, T value) {
this
.key = key;
this
.value = value;
next =
null
;
}
}
class
HashTable<T> {
int
capacity;
int
size;
LinkedList<Node<T>>[] buckets;
HashTable(
int
capacity) {
this
.capacity = capacity;
size =
0
;
buckets =
new
LinkedList[capacity];
for
(
int
i =
0
; i < capacity; i++) {
buckets[i] =
new
LinkedList<Node<T>>();
}
}
int
hashFunction(String key) {
int
sum =
0
;
int
factor =
31
;
for
(
int
i =
0
; i < key.length(); i++) {
sum = (sum + (
int
)(key.charAt(i)) * factor) % capacity;
factor = (factor *
31
) % (
int
)1e7;
}
return
sum;
}
void
insert(String key, T value) {
int
index = hashFunction(key);
LinkedList<Node<T>> list = buckets[index];
for
(Node<T> node : list) {
if
(node.key.equals(key)) {
node.value = value;
return
;
}
}
Node<T> node =
new
Node<T>(key, value);
list.addFirst(node);
size++;
}
T search(String key) {
int
index = hashFunction(key);
LinkedList<Node<T>> list = buckets[index];
for
(Node<T> node : list) {
if
(node.key.equals(key)) {
return
node.value;
}
}
System.out.println(
"Oops!! Data not found."
);
return
null
;
}
void
delete(String key) {
int
index = hashFunction(key);
LinkedList<Node<T>> list = buckets[index];
Node<T> prev =
null
;
for
(Node<T> node : list) {
if
(node.key.equals(key)) {
if
(prev ==
null
) {
list.removeFirst();
}
else
{
prev.next = node.next;
}
size--;
return
;
}
prev = node;
}
System.out.println(
"Key not found."
);
}
double
loadFactor() {
return
(
double
)size / capacity;
}
void
rehash() {
capacity *=
2
;
LinkedList<Node<T>>[] newBuckets =
new
LinkedList[capacity];
for
(
int
i =
0
; i < capacity; i++) {
newBuckets[i] =
new
LinkedList<Node<T>>();
}
for
(
int
i =
0
; i < buckets.length; i++) {
for
(Node<T> node : buckets[i]) {
int
newIndex = hashFunction(node.key);
newBuckets[newIndex].addFirst(node);
}
}
buckets = newBuckets;
}
}
public
class
Main {
public
static
void
main(String[] args) {
HashTable<Integer> map =
new
HashTable<>(
10
);
map.insert(
"Manish"
,
16
);
map.insert(
"Vartika"
,
14
);
map.insert(
"ITT"
,
5
);
map.insert(
"elite_Programmer"
,
4
);
map.insert(
"pluto14"
,
14
);
map.insert(
"GeeksForGeeks"
,
11
);
System.out.println(
"Value of GeeksForGeeks: "
+ map.search(
"GeeksForGeeks"
));
System.out.println(
"Value of ITT: "
+ map.search(
"ITT"
));
System.out.println(
"Value of Manish: "
+ map.search(
"Manish"
));
System.out.println(
"Value of Vartika: "
+ map.search(
"Vartika"
));
System.out.println(
"Value of elite_programmer: "
+ map.search(
"elite_programmer"
));
System.out.println(
"Value of pluto14: "
+ map.search(
"pluto14"
));
}
}