Design HashMap

easy hash map design

Problem

Design a HashMap without any built-in libraries. Implement put(key, value), get(key) returning -1 if absent, and remove(key).

Inputput(1,1); put(2,2); get(1); get(3); put(2,1); get(2); remove(2); get(2);
Output1, -1, 1, -1
Chaining: keys with the same bucket index live in the same bucket's list.

class MyHashMap:
    def __init__(self):
        self.size = 1009
        self.buckets = [[] for _ in range(self.size)]
    def _bucket(self, key):
        return self.buckets[key % self.size]
    def put(self, key, value):
        b = self._bucket(key)
        for i, (k, _) in enumerate(b):
            if k == key:
                b[i] = (key, value); return
        b.append((key, value))
    def get(self, key):
        for k, v in self._bucket(key):
            if k == key: return v
        return -1
    def remove(self, key):
        b = self._bucket(key)
        for i, (k, _) in enumerate(b):
            if k == key: b.pop(i); return
class MyHashMap {
  constructor() { this.size = 1009; this.buckets = Array.from({length: this.size}, () => []); }
  _b(key) { return this.buckets[key % this.size]; }
  put(key, value) {
    const b = this._b(key);
    for (const pair of b) if (pair[0] === key) { pair[1] = value; return; }
    b.push([key, value]);
  }
  get(key) {
    for (const [k, v] of this._b(key)) if (k === key) return v;
    return -1;
  }
  remove(key) {
    const b = this._b(key);
    const i = b.findIndex(p => p[0] === key);
    if (i >= 0) b.splice(i, 1);
  }
}
class MyHashMap {
    int size = 1009;
    List<int[]>[] buckets;
    public MyHashMap() { buckets = new List[size]; for (int i = 0; i < size; i++) buckets[i] = new ArrayList<>(); }
    public void put(int key, int value) {
        List<int[]> b = buckets[key % size];
        for (int[] p : b) if (p[0] == key) { p[1] = value; return; }
        b.add(new int[]{key, value});
    }
    public int get(int key) {
        for (int[] p : buckets[key % size]) if (p[0] == key) return p[1];
        return -1;
    }
    public void remove(int key) {
        List<int[]> b = buckets[key % size];
        for (int i = 0; i < b.size(); i++) if (b.get(i)[0] == key) { b.remove(i); return; }
    }
}
class MyHashMap {
    int sz = 1009;
    vector<list<pair<int,int>>> buckets;
public:
    MyHashMap() : buckets(1009) {}
    void put(int key, int value) {
        auto& b = buckets[key % sz];
        for (auto& p : b) if (p.first == key) { p.second = value; return; }
        b.push_back({key, value});
    }
    int get(int key) {
        for (auto& p : buckets[key % sz]) if (p.first == key) return p.second;
        return -1;
    }
    void remove(int key) {
        auto& b = buckets[key % sz];
        for (auto it = b.begin(); it != b.end(); ++it) if (it->first == key) { b.erase(it); return; }
    }
};
Time: O(n / k) per op Space: O(n + k)