在某些情况下,我需要驱逐 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();
}
这很丑陋:如果我使用 SortedSet
(出于其他原因,SortedSet
不是这里的选项):
if (/*stuff*/)
{
mySet.remove(mySet.first());
}
那么有没有一种更简洁的方法来做到这一点,没有:
- 更改
Set
实现,或者 - 编写静态实用程序方法?
利用 Guava 的任何解决方案很好。
我完全知道集合没有固有的顺序。我问的是删除迭代顺序定义的第一个条目。
最佳答案
LinkedHashSet 是 LinkedHashMap 的包装器,它支持简单的“删除最旧”策略。要将它用作一个集合,你可以这样做
Set<String> set = Collections.newSetFromMap(new LinkedHashMap<String, Boolean>(){
protected boolean removeEldestEntry(Map.Entry<String, Boolean> eldest) {
return size() > MAX_ENTRIES;
}
});
关于java - 从 Set 中移除 "first"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5792596/