【发布时间】:2011-05-10 10:19:06
【问题描述】:
我正在尝试缓存许多仅具有类似集合要求的类似值。不幸的是,Set<?> 只允许我检查内部是否存在元素 - 它不会将现有元素返回给我。我想做的是:
Element e = receiveSomeElement();
e = elements.cache(e);
// now e is either the original e, or one that was already in the cache
doSomeWorkOn(e);
我可能可以用SortedSet 模拟它并获得.subSet(e, e),但是让集合保持排序似乎是浪费时间。我也可以使用HashMap<Element, Element> 并存储与键和值相同的引用,但这似乎同样肮脏......
有更好的方法吗?
【问题讨论】:
-
只使用 hashmap,这是实现缓存的唯一方法
-
为什么要这样做?什么时候从缓存中清除元素?你想怎么做?您可能需要考虑在缓存中使用 WeakReferences。
-
我最终写了
ObjectCache<E> implements Set<E>和WeakHashMap<E, WeakReference<E>>成员。
标签: java caching collections set