Untitled

 avatar
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...