Удаление элемента из ConcurrentHashMap добавленного первым

Рейтинг: -1Ответов: 1Опубликовано: 14.02.2023

В программе используется 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);

И так далее по списку. Может быть есть встроенные функции или идеи как можно реализовать подобный функционал?

Ответы

▲ 0

Ну, во первых структура 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);
}