В определенных ситуациях мне нужно выселить самый старый элемент в Java Set
. Набор реализован с использованием LinkedHashSet
, что делает это простым: просто избавьтесь от первого элемента, возвращаемого заданным итератором:
Set<Foo> mySet = new LinkedHashSet<Foo>();
// do stuff...
if (mySet.size() >= MAX_SET_SIZE)
{
Iterator<Foo> iter = mySet.iterator();
iter.next();
iter.remove();
}
Это уродливо: 3 строки, чтобы сделать что-то, что я мог бы сделать с 1 строкой, если бы я использовал SortedSet
(по другим причинам SortedSet
здесь не вариант):
if (/*stuff*/)
{
mySet.remove(mySet.first());
}
Итак, есть более чистый способ сделать это, без:
- изменение реализации
Set
или - запись статического метода утилиты?
Любые решения, использующие Guava, являются точными.
Я полностью понимаю, что наборы не имеют встроенного порядка. Я спрашиваю об удалении первой записи, определенной порядком итерации.