LinkedListMap
public class LinkedListMap<K,V> implements Map<K,V>{
private class Node<K,V>{
public K key;
public V value ;
public Node next;
public Node (K key,V value ,Node<K,V> next){
this .value = value ;
this .key = key;
this .next = next;
}
public Node (K key) {
this (key, null , null );
}
public Node () {
this (null , null , null );
}
@Override
public String toString (){
return "Node{" +
"key=" + key +
", value=" + value +
", next=" + next +
'}' ;
}
}
private Node dummyHead;
private int size;
public LinkedListMap (){
size = 0 ;
dummyHead = new Node<>();
}
@Override
public int getSize () {
return size;
}
@Override
public boolean isEmpty () {
return size == 0 ;
}
private Node getNode (K key){
Node cur = dummyHead.next;
while (cur!=null ){
if (cur.key.equals(key)){
return cur;
}
cur = cur.next
}
return null ;
}
@Override
public boolean contains (K key){
return getNode(key)!=null ;
}
@Override
public void add (K key,V value ){
Node node = getNode(key);
if (node == null ){
dummyHead.next = new Node(key,value ,dummyHead.next);
size++;
}else {
node.value = value ;
}
}
@Override
public void set (K key,V newValue){
Node node = getNode(key);
if (node==null ){
throw new IllegalArgumentException(key + "doesn't exist!" );
}
node.value = newValue;
}
@Override
public V remove (K key){
Node prev = dummyHead;
while (prev.next!=null ){
if (prev.next.key.equals(key)){
break ;
}
}
prev = prev.next;
if (prev.next!=null ){
Node delNode = prev.next;
prev.next = prev.next.next;
delNode.next = null ;
size--;
return (V)delNode.value ;
}
return null ;
}
}