Реализация коллекции Java с таймаутом элементов - PullRequest
8 голосов
/ 20 февраля 2012

Существует ли какая-то реализация коллекции, поддерживающая истечение срока действия элементов.

Например:

Collection<User> cachedUsers = new ExpirableList<User>(10000);

, где

public ExpirableList(final long timeout){...}

И по истечении заданного времени (10000ms в данном конкретном примере) добавленные элементы будут удалены из коллекции. Используя это, мы предотвратим переполнение нашей коллекции cachedUsers.

Ответы [ 4 ]

9 голосов
/ 20 февраля 2012

Да, Guava поддерживает кэш с истекшим сроком действия. См. Страница объяснения Гуавы по кешам .

Альтернативой является кэш LRU (который использовался реже всего), который удаляет самый старый доступный элемент при вставке нового элемента.

3 голосов
/ 20 февраля 2012

Не совсем понятно, как вы пытаетесь использовать коллекцию, но CacheBuilder от Guava может вам помочь.

2 голосов
/ 16 декабря 2014

Другая альтернатива - ExpiringMap :

Map<String, User> users = ExpiringMap.builder()
  .expiration(10, TimeUnit.SECONDS)
  .build();
2 голосов
/ 20 февраля 2012

Вы можете реализовать это, написав обертку, скажем, для TreeMap, где ключом будет время вставки.При каждой вставке вы можете удалить список заголовков, для которого «истекло время ожидания».

Использование времени вставки в качестве указания на то, должен ли быть удален вход, кажется плохой идеей.Кажется, лучше использовать, например, некоторый LRU (наименее используемый) кеш.Такие кэши легко доступны в библиотеках, таких как, например, EHCache . Не изобретайте велосипед.

Вопросы, связанные с данной:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...