Design a HashMap without using any built-in hash table libraries.
Implement the MyHashMap
class:
MyHashMap()
initializes the object with an empty map.void put(int key, int value)
inserts a(key, value)
pair into the HashMap. If thekey
already exists in the map, update the correspondingvalue
.int get(int key)
returns thevalue
to which the specifiedkey
is mapped, or-1
if this map contains no mapping for thekey
.void remove(key)
removes thekey
and its correspondingvalue
if the map contains the mapping for thekey
.
Example 1:
Input ["MyHashMap", "put", "put", "get", "get", "put", "get", "remove", "get"] [[], [1, 1], [2, 2], [1], [3], [2, 1], [2], [2], [2]] Output [null, null, null, 1, -1, null, 1, null, -1] Explanation MyHashMap myHashMap = new MyHashMap(); myHashMap.put(1, 1); // The map is now [[1,1]] myHashMap.put(2, 2); // The map is now [[1,1], [2,2]] myHashMap.get(1); // return 1, The map is now [[1,1], [2,2]] myHashMap.get(3); // return -1 (i.e., not found), The map is now [[1,1], [2,2]] myHashMap.put(2, 1); // The map is now [[1,1], [2,1]] (i.e., update the existing value) myHashMap.get(2); // return 1, The map is now [[1,1], [2,1]] myHashMap.remove(2); // remove the mapping for 2, The map is now [[1,1]] myHashMap.get(2); // return -1 (i.e., not found), The map is now [[1,1]]
Constraints:
0 <= key, value <= 106
- At most
104
calls will be made toput
,get
, andremove
.
思路:hashmap就是array of linkedlist,注意两点:第一:put里面如果含有key,要覆盖。第二:array里面是dummpynode, put的时候,加入头部;这题适合电话面试;考察基础知识;
class MyHashMap {
public class ListNode {
public ListNode next;
public ListNode pre;
public int key;
public int val;
public ListNode(int key, int val) {
this.key = key;
this.val = val;
}
}
public int capacity = 1000;
public ListNode[] array ;
public MyHashMap() {
this.array = new ListNode[capacity];
for(int i = 0; i < capacity; i++) {
array[i] = new ListNode(-1,-1);
}
}
public void put(int key, int value) {
int index = key % capacity;
ListNode cur = array[index];
if(cur.next == null) {
cur.next = new ListNode(key, value);
} else {
while(cur.next != null && cur.next.key != key) {
cur = cur.next;
}
if(cur.next != null) {
cur.next.val = value;
} else {
cur.next = new ListNode(key, value);
}
}
}
public int get(int key) {
int index = key % capacity;
ListNode cur = array[index];
while(cur.next != null && cur.next.key != key) {
cur = cur.next;
}
if(cur.next == null) {
return -1;
} else {
return cur.next.val;
}
}
public void remove(int key) {
int index = key % capacity;
ListNode cur = array[index];
while(cur.next != null && cur.next.key != key) {
cur = cur.next;
}
if(cur.next != null && cur.next.key == key) {
cur.next = cur.next.next;
}
}
}
/**
* Your MyHashMap object will be instantiated and called as such:
* MyHashMap obj = new MyHashMap();
* obj.put(key,value);
* int param_2 = obj.get(key);
* obj.remove(key);
*/