sclass BetterLinkedHashSet extends AbstractSet { Map> entries = hashMap(); Entry head, tail; sclass Entry { A value; Entry prev, next; } public bool add(A a) { if (entries.containsKey(a)) false; new Entry n; n.value = a; n.prev = tail; if (tail != null) tail.next = n; tail = n; entries.put(a, n); } public bool remove(A a) { ret remove(entries.get(a)); } public bool remove(Entry node) { if (node == null) false; if (node.next != null) node.next.prev = node.prev; else tail = node.prev; if (node.prev != null) node.prev.next = node.next; entries.remove(node.value); true; } }