/** Return the k most accessed elements, for a given k; O(k) time */ public List top(int k) { if (k < 0 || k > size()) throw new IllegalArgumentException("Invalid argument"); List T = new NodeList(); // top-k list if (!isEmpty()) { Position p = fList.first(); for (int i = 1; i < k; i++) { T.insertLast(value(p)); p = fList.next(p); } T.insertLast(value(p)); } return T; } /** An overridden toString method, for visualization purposes */ public String toString() { return fList.toString(); } /** Helper method */ protected Object value(Position p) { return ((Entry) p.element()).value(); } /** Helper method */ protected Entry entry(Position p) { return (Entry) p.element(); }