Android LRUCache Retrieval



我在Android中实现了一个存储对象的标准LRUCache。每个键都是与存储的对象相关联的唯一对象 Id。我的问题是,从缓存中检索对象的唯一方法是通过 ObjectId(没有迭代器)。实现 getAll() 方法的最佳方法是什么?另一种选择是将所有 ObjectId 存储在某个位置的列表中,这样我就可以遍历列表并获取所有对象 - 但是保存所有 ObjectId 的最佳方式是什么?

谢谢!

如果您正在使用(或扩展)Android 提供的LruCache,它有一个snapshot方法,该方法返回键(您的 ObjectId)和值(您的对象)映射。你可以做这样的事情:

Map<ObjectIds, Object> snapshot = lruCache.snapshot();
for (ObjectIds id : snapshot.keySet()) {
  Object myObject = lruCache.get(id);
}

如果您不使用Android的LruCache,那么我想这将取决于您的实现。 (我也很好奇是什么促使你实现自己的而不是子类化提供的!

使用快照获取当前集合

lruCache.snapshot().values()

遍历 LRU 缓存中的对象没有意义。您无法知道哪个对象仍在缓存中,哪些对象被逐出(您实际上可以,但那是另一回事)。听起来你可能最好使用不同的数据结构,如哈希图左右。没有什么会被驱逐出那里。

一个常见的用例是在内存中有一个所有可能的对象键的列表。如果需要,请检查它是否在缓存中。如果没有,请接收它并将其添加到缓存中。

最新更新