объект. Как уже говорилось, это довольно уродливо и неуместно, и я предпочитаю решение Майка (о котором я не думал;)):
еделенных ситуациях мне нужно выселить самый старый элемент в JavaSet
, Набор реализован с использованием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
реализация илинаписание статического служебного метода?Любые решения с использованиемгуайява в порядке.
Я полностью осознаю, что наборы не имеют внутреннего порядка. Я спрашиваю об удалении первой записи в соответствии с порядком итераций.