我在Android中实现了一个存储对象的标准LRUCache。每个键都是与存储的Object关联的唯一ObjectId。我的问题是从缓存中检索Object的唯一方法是ObjectId(没有迭代器)。实现getAll()方法的最佳方法是什么? 另一个选择是将所有ObjectIds存储在某个列表的列表中,因此我可以迭代列表并获取所有对象 - 但是保存所有ObjectIds的最佳方法是什么?
谢谢!
答案 0 :(得分:7)
如果您正在使用(或扩展)Android提供的LruCache
,它会使用snapshot
方法返回键(您的ObjectIds)和值(您的对象)的映射。你可以这样做:
Map<ObjectIds, Object> snapshot = lruCache.snapshot();
for (ObjectIds id : snapshot.keySet()) {
Object myObject = lruCache.get(id);
}
如果您没有使用Android的LruCache
,那么我认为这取决于您的实施。 (我也很好奇是什么促使你实现自己的,而不是子类化提供的!)
答案 1 :(得分:1)
目前使用快照获取当前收藏
lruCache.snapshot().values()
答案 2 :(得分:0)
迭代LRU缓存中的对象是没有意义的。你无法知道哪个对象仍然在缓存中,哪些被驱逐(你实际可以,但这是另一个故事)。听起来你最好使用像Hashmap这样的不同数据结构。什么都不会被驱逐出去。
一个常见的用例是在内存中包含所有可能对象键的List。如果需要,请检查它是否在缓存中。如果没有,请接收它并将其添加到缓存中。