Libraryless. Click here for Pure Java version (10127L/55K).
1 | // synchronized except for iterator |
2 | persistable sclass MRUAndAllTimeTop_optimized<A> { |
3 | Map<A, Bool> mru = syncMRUCache(10); // most recently used |
4 | new OptimizedMultiSet<A> allTimeTop; |
5 | int allTimeMaxSize = 100; |
6 | |
7 | // increase a's score in all time top and move to front int MRU |
8 | synchronized void add(A a) { |
9 | mru.remove(a); // force re-insertion |
10 | mru.put(a, true); |
11 | allTimeTop.add(a); |
12 | allTimeTop.truncate(allTimeMaxSize); |
13 | } |
14 | |
15 | synchronized void addAll(Iterable<A> l) { fOr (A a : l) add(a); } |
16 | |
17 | // may count elements twice |
18 | synchronized int size() { |
19 | ret l(mru) + allTimeTop.uniqueSize(); |
20 | } |
21 | |
22 | // interleave latest and most often accessed elements |
23 | // iterator not synchronized |
24 | synchronized ItIt<A> mixedIterator() { |
25 | ret uniqueIterator(roundRobinCombinedIterator( |
26 | reversedIterator(keysList(mru)), |
27 | iterator(allTimeTop.highestFirst()))); |
28 | } |
29 | |
30 | toString { |
31 | ret shortClassName(this) + " (" + n2(size()) + ")"; |
32 | } |
33 | |
34 | // MRU elements in last access order |
35 | // (These aren't that optimized, really. Should replace |
36 | // LinkedHashMap.) |
37 | Cl<A> recent() { |
38 | ret reversedKeysList(mru); |
39 | } |
40 | |
41 | A mostRecent() { |
42 | ret last(keys(mru)); |
43 | } |
44 | } |
Began life as a copy of #1024856
download show line numbers debug dex old transpilations
Travelled to 4 computer(s): bhatertpkbcr, ekrmjmnbrukm, mqqgnosmbjvj, pyentgdyhuwx
No comments. add comment
Snippet ID: | #1031875 |
Snippet name: | MRUAndAllTimeTop_optimized - keep sorted top ten list |
Eternal ID of this version: | #1031875/12 |
Text MD5: | 36cde0f285098a16e614db74876b80de |
Transpilation MD5: | b14d5f5e062dba2d25680f21bea61d0d |
Author: | stefan |
Category: | javax |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2022-08-12 03:58:13 |
Source code size: | 1238 bytes / 44 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 296 / 556 |
Version history: | 11 change(s) |
Referenced in: | [show references] |