Android LRUCache检索

时间:2013-12-18 21:02:41

标签: android caching iterator lru android-lru-cache

我在Android中实现了一个存储对象的标准LRUCache。每个键都是与存储的Object关联的唯一ObjectId。我的问题是从缓存中检索Object的唯一方法是ObjectId(没有迭代器)。实现getAll()方法的最佳方法是什么? 另一个选择是将所有ObjectIds存储在某个列表的列表中,因此我可以迭代列表并获取所有对象 - 但是保存所有ObjectIds的最佳方法是什么?

谢谢!

3 个答案:

答案 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。如果需要,请检查它是否在缓存中。如果没有,请接收它并将其添加到缓存中。