Design a HashMap without using any built-in hash table libraries.
Implement the
-
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 .
values = [[], [1, 1], [2, 2], [1], [3], [2, 1], [2], [2], [2]]
Output: [null, null, null, 1, -1, null, 1, null, -1]
Explanation:
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 to
put ,get , andremove .
Contents
Solution 1 - Using an array of LinkedLists
This is similar to
In order to find the index where to insert a given key, we will do a modular operation on the key value with array length, this will ensure that we will never got out of bounds of array.
Implementation steps:
-
Constructor: we will initialize array elements with empty
LinkedList , so that we don't need to donull
checks later. -
put(int key, int value): we will get the index using
key % array.length , then check if thekey already in theLinkedList at that index or not, if it does not contain the key, then add a newEntry to the linked list, it if exists then update the value. -
get(int key): we will get the index using
key % array.length , then loop throughLinkedList elements at that index, and if anykey matches with thekey supplied, then return the correspondingvalue , return-1 otherwise. -
remove(int key): we will get the index using
key % array.length , then remove the entry with thekey from theLinkedList at that index.
Complexity Analysis:
Time complexity: All opeeration runs in O(1) time,
Space complexity: O(1) since we are storing elements into an array of linked lists.
Above implementations source code can be found at