Buckets of key-value pairs
Time O(1) average per call Space O(n + buckets)Each bucket is a list of int[]{key, value}. put/get/remove search one bucket.
put(1,1), put(2,2), get(1), get(3), put(2,1), get(2), remove(2), get(2)buckets (non-empty)(map)
returned(list)
empty
Step 1/4put(1,1): 1 % 1009 = bucket 1, no key 1 there, so append (1, 1). put(2,2) goes to bucket 2.
import java.util.*;
class MyHashMap {
private static final int BUCKETS = 1009;
private final List<List<int[]>> table = new ArrayList<>();
public MyHashMap() {
for (int i = 0; i < BUCKETS; i++) table.add(new LinkedList<>());
}
private List<int[]> bucket(int key) { return table.get(key % BUCKETS); }
public void put(int key, int value) {
for (int[] e : bucket(key)) if (e[0] == key) { e[1] = value; return; }
bucket(key).add(new int[]{key, value});
}
public int get(int key) {
for (int[] e : bucket(key)) if (e[0] == key) return e[1];
return -1;
}
public void remove(int key) {
bucket(key).removeIf(e -> e[0] == key);
}
}Verdict: Java's HashMap does the same, switching long buckets to small balanced trees.