Удаление «первого» объекта из набора

В определенных ситуациях мне нужно удалить самый старый элемент в Java Set . Набор реализован с помощью LinkedHashSet , что упрощает задачу: просто избавьтесь от первого элемента, возвращаемого итератором набора:

Set mySet = new LinkedHashSet();
// do stuff...
if (mySet.size() >= MAX_SET_SIZE)
{
    Iterator iter = mySet.iterator();
    iter.next();
    iter.remove();
}

Это уродливо: 3 строки, чтобы сделать то, что я мог сделайте с одной строкой, если бы я использовал SortedSet (по другим причинам SortedSet здесь не подходит):

if (/*stuff*/)
{
    mySet.remove(mySet.first());
}

Есть ли более чистый способ сделать это , без:

  • изменения реализации Set , или
  • написать статический служебный метод?

Любые решения, использующие Guava , подходят.


Я полностью осознаю, что наборы не имеют внутреннего упорядочения. Я прошу удалить первую запись в соответствии с порядком итераций.

17
задан Matt Ball 26 April 2011 в 15:25
поделиться