hashset中的新条目

时间:2011-06-06 20:57:42

标签: java hashset

有没有办法知道添加到hashset的最后一个新条目是什么?在我的程序中,第一个循环增加了[艾美奖,卡尔]而不是在我的第二个循环中它添加了[艾美奖,丹,卡尔]无论如何我只能使用dan而不是其余的第三个循环?

5 个答案:

答案 0 :(得分:6)

java.util.HashSet不保留顺序,但java.util.LinkedHashSet会保留顺序。你能用它吗?来自Javadoc:

  

此实现与HashSet的不同之处在于它维护了一个贯穿其所有条目的双向链表。此链接列表定义迭代排序,即元素插入集合(插入顺序)的顺序。请注意,如果将元素重新插入到集合中,则插入顺序不会受到影响。

答案 1 :(得分:0)

HashSet<String> oldpeople = new HashSet<String>();P
HashSet<String> newPeople;
for (Set<String> cycle : input)
{ 
    newPeople = new HashSet<String>();
    newPeople.addAll(cycle);
    newPeople.removeAll(oldPeople);
    oldPeople.addAll(cycle);
}

现在你有最后一个新的一个总是包含在newPeople中。

答案 2 :(得分:0)

Hashset由哈希表支持,并且无法保证检索顺序。检索顺序与插入顺序不同。所以,不可能知道最后添加了哪个项目。

变通办法 - 可以使用两个哈希集,将旧版本与新版本进行比较并获取新条目,或者使用某种指示符来区分添加的特定迭代或使用ArrayList或适合您设计的任何内容。

答案 3 :(得分:0)

HashSet s不包含有关添加元素的顺序的信息。您需要将其替换为具有的集合(例如ArrayList)。

答案 4 :(得分:0)

好吧,如果我理解你的帖子和评论正确(这很难,试着更精确:) :)你真正想要的是:a)不要多次向HashSet添加任何项目和b)看看是否该组在尝试添加时已包含给定项目。

a)对于每个集合都是真实的,对于b)你可以只使用add的返回值:如果返回false则已经包含在集合中。