// should be persistable
sclass MRUAndAllTimeTop {
new MRUCache mru; // most recently used
new MultiSet allTimeTop;
// increase a's score in all time top and move to front int MRU
void add(A a) {
mru.remove(a); // force re-insertion
mru.put(a, true);
allTimeTop.add(a);
}
// interleave latest and most often accessed elements
ItIt mixedIterator() {
ret uniqueIterator(roundRobinCombinedIterator(
reversedIterator(keysList(mru)),
iterator(allTimeTop.highestFirst())));
}
}