我正在使用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");
我将只获得元素(另一半仅显示)。不是这样的吗?
答案 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;像变量或用于每个循环。