// TODO: make 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.put(a, true);
allTimeTop.add(a);
}
// interleave latest and most often accessed elements
ItIt mixedIterator() {
ret roundRobinCombinedIterator(
reversedIterator(keysList(mru)),
iterator(allTimeTop.highestFirst()));
}
}