5

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

谢谢!

4

3 回答 3

7

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

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

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

于 2015-02-26T04:55:44.287 回答
3

使用快照获取当前集合

lruCache.snapshot().values()
于 2016-05-09T15:10:04.030 回答
-1

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

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

于 2013-12-18T21:09:43.683 回答