public class Map<K , V> {
private class Node {
public K key ;
public V value ;
public Node next ;
public Node(K key , V value , Node next) {
this.key = key ;
this.value = value ;
this.next = next ;
}
public Node(K key ,Node next) {
this(key , null , next ) ;
}
public Node() {
this(null , null , null) ;
}
}
private int size ;
private Node dummyHead ;
public Map() {
dummyHead = new Node() ;
size = 0 ;
}
public boolean isEmpty() {
return size == 0 ;
}
public int getSize() {
return size ;
}
public Node getNode(K key) {
Node node = dummyHead.next ;
while(node != null) {
if(node.key == key) {
return node ;
}
node = node.next ;
}
return null ;
}
public boolean contains(K key) {
return getNode(key) != null ;
}
public V getValue(K key) {
return getNode(key).value ;
}
public void add(K key , V value) {
Node node = getNode(key) ;
if(node == null) {
dummyHead.next = new Node (key , value , dummyHead.next) ;
} else {
node.value = value ;
}
}
public void set(K key , V value) {
Node node = getNode(key) ;
if(node != null) {
node.value = value ;
} else {
throw new IllegalArgumentException("Key doesn't exist.") ;
}
}
public V remove(K key) {
Node prev = dummyHead.next ;
while(prev != null) {
if(prev.next.key.equals(key)) {
break ;
}
prev = prev.next ;
}
if(prev.next != null) {
Node delNode = prev.next ;
prev.next = delNode.next ;
delNode.next = null ;
return delNode.value ;
}
return null ;
}
public void output() {
Node node = dummyHead.next ;
while(node != null) {
System.out.println(node.key +":" + node.value);
node = node.next ;
}
}
public static void main(String args[]) {
Map<Integer , String> map = new Map<> () ;
map.add(1, "Weather");
map.add(2, "Sea");
map.add(3, "Sky");
map.add(4, "Water");
map.output();
System.out.println("++++++++++++++++++++++++++++++++++");
map.remove(3) ;
map.output() ;
}
}