public class HashMap { private final int bucketCount = 16; private final Bucket[] buckets = new Bucket[bucketCount]; private int size = 0; private int getBucketIndex(K key) { return key.hashCode() & (bucketCount - 1); } public void put(K key, V value) { int bucketIndex = getBucketIndex(key); Bucket bucket = buckets[bucketIndex]; if (bucket == null) { bucket = new Bucket<>(); buckets[bucketIndex] = bucket; } bucket.put(key, value); size++; } public V get(K key) { int bucketIndex = getBucketIndex(key); Bucket bucket = buckets[bucketIndex]; if (bucket == null) { return null; } return bucket.get(key); } public void remove(K key) { int bucketIndex = getBucketIndex(key); Bucket bucket = buckets[bucketIndex]; if (bucket == null) { return; } bucket.remove(key); size--; } public int size() { return size; } }