Untitled
unknown
java
3 years ago
2.6 kB
8
Indexable
import java.util.*;
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
public class MyHashMap<K, V> {
class MapNode<K, V> {
K key;
V value;
MapNode<K, V> next;
public MapNode(K key, V value) {
this.key = key;
this.value = value;
next = null;
}
}
ArrayList<MapNode<K, V>> buckets;
int size;
int numBuckets;
final double DEFAULT_LOAD_FACTOR = 0.75;
public MyHashMap() {
numBuckets = 5;
buckets = new Arraylist<>(numBuckets);
for (int i = 0; i < numBuckets; i++) {
buckets.add(null);
}
}
private int getBucketInd(K key) {
int hashCode = key.hashCode();
return (hashCode % numBuckets);
}
public void put(K key, V value) {
int bucketInd = getBucketInd(key);
MapNode<K, V> head = buckets.get(bucketInd);
while (head != null) {
if (head.key.equals(key)) {
head.value = value;
return;
}
head = head.next;
}
MapNode<K, V> newElementNode = new MapNode<K, V>(key, value);
head = buckets.get(bucketInd);
newElementNode.next = head;
buckets.set(bucketInd, newElementNode);
size++;
double loadFactor = (1.0 * size) / numBuckets;
if (loadFactor > DEFAULT_LOAD_FACTOR) {
rehash();
}
}
private void rehash() {
ArrayList<MapNode<K, V> > temp = buckets;
buckets = new ArrayList<MapNode<K, V> >(2 * numBuckets);
for (int i = 0; i < 2 * numBuckets; i++) {
buckets.add(null);
}
size = 0;
numBuckets *= 2;
for (int i = 0; i < temp.size(); i++) {
MapNode<K, V> head = temp.get(i);
while (head != null) {
K key = head.key;
V val = head.value;
insert(key, val);
head = head.next;
}
}
}
public void printMap() {
ArrayList<MapNode<K, V> > temp = buckets;
for (int i = 0; i < temp.size(); i++) {
MapNode<K, V> head = temp.get(i);
while (head != null) {
System.out.println("key = " + head.key + ", val = " + head.value);
head = head.next;
}
}
System.out.println();
}
}
}Editor is loading...