Удаление элемента из ConcurrentHashMap добавленного первым
В программе используется ConcurrentHashMap для хранения <String, Long>. Его максимальная вместимость - 10 элементов.
Мне необходимо при добавлении 11 элемента в ConcurrentHashMap удалять тот, который был добавлен самым первым. К примеру:
ConcurrentHashMap<String, Long> result = new ConcurrentHashMap<>();
result.put('A' - 1);
result.put('B' - 2);
. . .
result.put('Z' - 10);
Как сделать, чтобы при:
result.put('Е' - 11);
Удалялся именно:
result.put('A' - 1);
И так далее по списку. Может быть есть встроенные функции или идеи как можно реализовать подобный функционал?
Ответы (1 шт):
Автор решения: OLDx21
→ Ссылка
Ну, во первых структура HashMap здесь не подойдет, нужно то, что сохраняет порядок, например LinkedHashMap, что касается основной идеи, то можно сделать класс обертку для LinkedHashMap, и контролировать количество элементов, вот пример:
public class Wrapper<K, V> {
private LinkedHashMap<K, V> linkedHashMap;
private Integer maxSize;
public Wrapper(Integer maxSize) {
this.maxSize = maxSize;
linkedHashMap = new LinkedHashMap<>();
}
public void put(K key, V value) {
if (maxSize == linkedHashMap.size()) {
linkedHashMap.remove(linkedHashMap.keySet().iterator().next());
}
linkedHashMap.put(key, value);
}