// 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())); } }