Libraryless. Click here for Pure Java version (3554L/19K).
// Maximally compact implementation of such a thing // Use SortedArrayBasedMap instead if keys are sortable sclass MinimalMap<A, B> extends CompactAbstractMap<A, B> { O[] entries; *() {} *(Map<A, B> map) { if (empty(map)) ret; entries = new O[l(map)*2]; int i = 0; for (A a, B b : map) { entries[i++] = a; entries[i++] = b; } } public int size() { ret l(entries)/2; } public Set<Map.Entry<A, B>> entrySet() { ret toLinkedHashMap().entrySet(); } int find(O o) { if (entries != null) for (int i = 0; i < entries.length; i += 2) if (eq(entries[i], o)) ret i; ret -1; } public bool containsKey(O o) { ret find(o) >= 0; } @Override public B get(O o) { int i = find(o); ret i >= 0 ? (B) entries[i+1] : null; } LinkedHashMap<A, B> toLinkedHashMap() { new LinkedHashMap<A, B> map; if (entries != null) for (int i = 0; i < entries.length; i += 2) map.put((A) entries[i], (B) entries[i+1]); ret map; } @Override public B put(A key, B value) { int i = find(key); // existing key? if (i >= 0) { B oldValue = (B) entries[i+1]; entries[i+1] = value; ret oldValue; } // new key int l = l(entries); entries = resizeObjectArray(entries, l+2); entries[l] = key; entries[l+1] = value; null; } @Override public B remove(O key) { int i = find(key); if (i < 0) null; B oldValue = (B) entries[i+1]; int l = l(entries); entries = spliceObjectArray(entries, i, l+2, null); ret oldValue; } }
Began life as a copy of #1030858
download show line numbers debug dex old transpilations
Travelled to 4 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, vouqrxazstgt
No comments. add comment
Snippet ID: | #1031042 |
Snippet name: | MinimalMap - map consisting just of an unordered object array [O(n) access/put/remove] |
Eternal ID of this version: | #1031042/13 |
Text MD5: | f7c46e86c95a8a8b56892e635e2e793a |
Transpilation MD5: | 7109e2bf87e9ac69633c54366c495066 |
Author: | stefan |
Category: | javax |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2021-07-16 06:36:30 |
Source code size: | 1706 bytes / 76 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 197 / 427 |
Version history: | 12 change(s) |
Referenced in: | [show references] |