Java DLL Coding
import java.util.NoSuchElementException; public class Cache<T> implements ICache<T> { private int size; private DLLNode<T> head, tail, end; private int modCount; int numOfHit, numOfAccess; public Cache() { head = null; tail = null; modCount = 0; size = 0; } @Override public T get(T target) { numOfAccess++; DLLNode<T> current = head; while(!current.getElement().equals(target) && current != null) { current = current.getNext(); } if(current == null) { return null; } else { numOfHit++; return current.getElement(); } } @Override public void clear() { head = null; tail = null; size = 0; } @Override public void add(T data) { DLLNode<T> newNode = new DLLNode<T>(data); if(isEmpty()) { head = newNode; tail = newNode; } else { head.setPrevious(newNode); newNode.setNext(head); head = newNode; } size++; modCount++; } @Override public void removeLast() { if(isEmpty()) { throw new IllegalStateException("ICache - removeLast"); } DLLNode<T> newNode = tail; if(newNode.getPrevious() != null) { tail = tail.getPrevious(); tail.setNext(null); } else { tail = null; head = null; } size--; modCount++; } @Override public void remove(T target) { DLLNode<T> current = head; boolean found = false; while(!found & current != null) { if(current.getElement() == target) { found = true; } else { current = current.getNext(); } } if(!found) { throw new NoSuchElementException("ICache - remove"); } DLLNode<T> previous = current.getPrevious(); DLLNode<T> next = current.getNext(); if(current == head) { if(size == 1) { head = null; tail = null; } else { head = next; head.setPrevious(null); } } else if(current == tail) { tail = previous; tail.setNext(null); } else { previous.setNext(next); next.setPrevious(previous); } size--; modCount++; } @Override public void write(T data) { remove(data); add(data); } @Override public double getHitRate() { return (numOfHit / (double) numOfAccess); } @Override public double getMissRate() { return ((numOfAccess - numOfHit) / (double) numOfAccess); } @Override public boolean isEmpty() { return (size == 0); } }