One of the common interview question, is to build own CustomHashMap. Following code sample demonstrate generic map with put(), get() and remove() operations.
/** * The CustomHashMap uses an array of KeyValuePair. * KeyValuePair class where K is the key and V value and next is the element appended to it. The KeyValuePair acts * as a list * * MapList is used to store elements. the getHash() method is used to find the index of the array. * * @param <K> * @param <V> */ public class CustomHashMap<K, V> { KeyValuePair<K, V> mapList[] = new KeyValuePair[100]; public V get(K key) { int index = getHash(key); KeyValuePair<K,V> list = mapList[index]; return getMatchValue(list, key); } public void put(K key, V value) { int index = getHash(key); storeValue(index, key, value); } public void remove(K key) { int index = getHash(key); KeyValuePair<K,V> list = mapList[index]; if (list == null) return; // if only one element is present in the list ,set the index to null if(list.getKey().equals(key)){ if (list.next == null){ mapList[index] = null; return; } } KeyValuePair<K,V> prev = null; do{ if(list.key.equals(key)){ if (prev == null){ list = list.getNext(); }else{ prev.next = list.getNext(); } break; } list = list.next; }while(list != null); mapList[index] = list; } /* * find the match value and return , if not found either throw exception or return null. */ private V getMatchValue(KeyValuePair<K, V> list, K key) { while (list != null) { if (list.getKey().equals(key)) return list.getValue(); list = list.next; } return null; } private void storeValue(int index, K key, V value) { KeyValuePair<K, V> list = mapList[index]; // if list is empty , enter as first element if (list == null) { mapList[index] = new KeyValuePair<K, V>(key, value); } else { boolean done = false; // traverse through list , if a key is found ,replace the value or add it at the end of the list while(list.next != null) { if (list.getKey().equals(key)) { list.setValue(value); done = true; break; } list = list.next; } // add at the end of the list if (!done) list.next = new KeyValuePair<K, V>(key, value); } } private int getHash(K key) { int hash = key.hashCode(); return hash % 100; } public static void main(String args[]) { CustomHashMap<Integer, Integer> map = new CustomHashMap<Integer, Integer>(); map.put(1, 1); map.put(2, 2); map.put(201,201); System.out.println("get value is " + map.get(1)); System.out.println("get value is " + map.get(201)); System.out.println("get value is " + map.get(2)); map.remove(1); System.out.println("After deletion " + map.get(1)); System.out.println("get value is " + map.get(201)); } } class KeyValuePair<K, V> { K key; V value; KeyValuePair<K, V> next = null; public KeyValuePair<K, V> getNext() { return next; } public void setNext(KeyValuePair<K, V> next) { this.next = next; } public KeyValuePair(K key, V value) { super(); this.key = key; this.value = value; } public K getKey() { return key; } public void setKey(K key) { this.key = key; } public V getValue() { return value; } public void setValue(V value) { this.value = value; } }