public V get(Object key) {
   int index = Math.abs(key.hashCode()) % SIZE;
   if (buckets[index] == null) return null;
   for (MapEntry<K, V> iPair : buckets[index])
     if (iPair.getKey().equals(key)) {
       return iPair.getValue();
     }
   return null;
 }
 public V remove(Object k) {
   int index = Math.abs(k.hashCode()) % SIZE;
   LinkedList<MapEntry<K, V>> bucket = buckets[index];
   if (bucket == null) return null;
   ListIterator<MapEntry<K, V>> it = bucket.listIterator();
   while (it.hasNext()) {
     MapEntry<K, V> iPair = it.next();
     if (iPair.getKey().equals(k)) {
       V value = iPair.getValue();
       it.remove();
       return value;
     }
   }
   return null;
 }
 public V put(K key, V value) {
   V oldValue = null;
   int index = Math.abs(key.hashCode()) % SIZE;
   if (buckets[index] == null) buckets[index] = new LinkedList<>();
   LinkedList<MapEntry<K, V>> bucket = buckets[index];
   MapEntry<K, V> pair = new MapEntry<>(key, value);
   boolean found = false;
   ListIterator<MapEntry<K, V>> it = bucket.listIterator();
   while (it.hasNext()) {
     MapEntry<K, V> iPair = it.next();
     if (iPair.getKey().equals(key)) {
       oldValue = iPair.getValue();
       it.set(pair); // Replace old with new
       found = true;
       break;
     }
   }
   if (!found) buckets[index].add(pair);
   return oldValue;
 }