sclass TreeSetWithDuplicates implements Iterable { TreeSet> internal; Comparator comparator; *(Comparator *comparator) { internal = new TreeSet>((setA, setB) -> { ret comparator.compare(main first(setA), main first(setB)); }); } swappable Set makeInternalSet() { ret new HashSet; } void add(A a) { Set newSet = addAndReturnCollection(makeInternalSet(), a); Set found = navigableSet_find(internal, newSet); if (found != null) found.add(a); else internal.add(newSet); } void remove(A a) { Set newSet = addAndReturnCollection(makeInternalSet(), a); Set found = navigableSet_find(internal, newSet); if (found == null) ret; found.remove(a); if (empty(found)) internal.remove(found); } A first() { ret main first(main first(internal)); } public ItIt iterator() { ret nestedIterator(internal, methodLambda1 iterator); } }