Android LRUCache Retrieval

Я реализовал стандартную LRUCache в Android, которая хранит объекты. Каждый ключ - это уникальный ObjectId, связанный с сохраненным объектом. Моя проблема в том, что единственный способ извлечь объект из кэша - это ObjectId (без итератора). Каков наилучший способ реализации метода getAll()? Другой вариант - хранить все ObjectIds в списке где-нибудь, чтобы я мог перебирать списки и получать все Objects - но как лучше всего хранить все ObjectIds?

Спасибо!

3 ответа

Если вы используете (или расширяете) LruCache что обеспечивает Android, у него есть snapshot метод, который возвращает карту ключей (ваши ObjectIds) и значений (ваши объекты). Вы можете сделать что-то вроде этого:

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

Если вы не используете Android LruCache тогда я представляю, что это будет зависеть от вашей реализации. (Мне также было бы любопытно, что побудило вас реализовать свой собственный, вместо того, чтобы создавать подклассы!)

Использование снимка для получения текущей коллекции на данный момент

lruCache.snapshot().values()

Нет смысла перебирать объекты в кеше LRU. Вы не можете знать, какой объект все еще находится в кеше, а какой был удален (вы на самом деле можете, но это уже другая история). Похоже, вам, вероятно, лучше использовать другую структуру данных, например, Hashmap или около того. Оттуда никогда ничего не выселят.

Обычный вариант использования - иметь список всех возможных ключей объекта в памяти. Если он вам нужен, вы проверяете, есть ли он в кеше. Если нет, получите его и добавьте в кеш.

Другие вопросы по тегам