hashset检索相同的元素

时间:2014-05-06 08:09:03

标签: java hashset

我正在使用HashSet集合,因为我对唯一(没有重复)元素感兴趣。 我注意到我可以使用迭代器获取HashSet的所有元素。 我(简单)的问题是我是否可以两次(或更多次)检索相同的元素。在以下代码中更具体

HashSet<String> vectors = new HashSet<String>();
Iterator iterator = vectors.iterator(); 
String temp;
while (iterator.hasNext()){
    temp = (String) iterator.next();
    System.out.println("Next element inside HashSet is " + temp);
    out.write(temp + "\n");
}

我正在使用temp来存储HashSet的值并使用它两次(一次显示它,一次将它写入一个流。有没有办法保持在同一个元素? 我想如果我使用如下语法:

System.out.println("Next element inside HashSet is " + iterator.next());
out.write(iterator.next() + "\n");

我将只获得元素(另一半仅显示)。不是这样的吗?

6 个答案:

答案 0 :(得分:3)

由于您只是阅读Set的元素,我建议使用for-each循环,这与您的代码(第一个代码段)基本相同,但是已经针对这种情况设计了(并且是更具可读性的IMO)。

HashSet<String> vectors = new HashSet<String>();
for(String temp : vectors){
    System.out.println("Next element inside HashSet is " + temp);
    out.write(temp + "\n");
}

答案 1 :(得分:0)

在HashSet.iterator中,无法在不转移到下一个元素的情况下检索元素。

如果你想要这样的东西,可以考虑使用带有pop,push和top方法的堆栈。

尽管如此,我认为没有理由做你用temp做的事情。它正常,优雅,直截了当。

答案 2 :(得分:0)

@ Eypros,当你调用iterator.next()方法时,它会获取元素并移动下一步,这就是为什么你会获得半元素。

答案 3 :(得分:0)

itt.next()调用从itr返回当前元素,将itr指针移动一个。如果再次调用它,它将返回下一个不相同的元素。

答案 4 :(得分:0)

来自Iterator的{​​{1}}永远不会返回相同的HashSet两次。但是,在将变量赋值给变量之后,您可以根据需要多次使用返回值。

如果在迭代器上调用String两次,它将返回两个后续元素(如果剩余的元素不足,则抛出next()。)

你的错误可能是你假设NoSuchElementException改变迭代器的状态,前进到下一个位置。 Iterator.hasNext() 更改迭代器状态,可以多次调用。例如,要在末尾打印逗号分隔的列表而不使用逗号:

hasNext()

答案 5 :(得分:0)

System.out.println("Next element inside HashSet is " + iterator.next());
out.write(iterator.next() + "\n");

这个syntex将提供两个不同的元素。如果你想要相同的元素,那么要么你必须存储在&#34; Temp&#34;像变量或用于每个循环。