Untitled
unknown
java
2 years ago
2.6 kB
6
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...