0

我有这个迭代器,

Set<BigFraction> key = knowledgeD.keySet();
    TreeSet<BigFraction> sortKey = new TreeSet<BigFraction>();
        sortKey.addAll(key);

    Iterator<BigFraction> iter = sortKey.iterator();
        return iter;

BigFraction 只是数据类型,如果它可以更容易地将它与 int 或其他东西相结合。

无论如何,当我稍后调用迭代器时

while (iterator().hasNext());

它基本上只是给了我某种无限循环......当我在这个while循环之前打印出iterator()时,我得到

java.util.TreeMap$KeyIterator@53b4b24d

任何想法都卡住了,

问候,

4

4 回答 4

5

你需要Iterator像这样使用你的: -

while (iter.hasNext()) {
    System.out.println(iter.next()); //Do whatever you want
}

wherehasNext()告诉是否iterator有更多的值,并next()返回迭代器中的下一个值。

此外, @jacobm已经解释了为什么您的当前iterator循环不起作用(进入无限循环)。

于 2013-04-02T05:07:33.823 回答
4

iterator().hasNext()从不推进迭代器,它只是检查它是否有一个元素。while (iterator().hasNext());如果有任何值要迭代,那么总是无限循环。您可以使用以下方法修复它:

Iterator<BigFraction> it = iterator();
while (it.hasNext()) {
  it.next();
}
于 2013-04-02T05:07:31.783 回答
2

对 iterator() 的调用构造了一个新的迭代器,因此您的代码每次通过循环都会构造一个新的迭代器。而是尝试类似:

Iterator it = iter;
while (it.hasNext()) {
    it.next()
}

确保next()每次都通过循环调用,否则你不会增加迭代器,它只会停留在第一个项目上。

于 2013-04-02T05:09:39.700 回答
1

Iterator#hasNext如果迭代有更多元素,则返回 true,它不返回迭代中的下一个元素。确实如此Iterator#next

如果你使用 iterator 如果你必须调用iterator#next来获取集合的下一个元素,但是hasNext操作是可选的

你可以写 -

while (iter.hasNext()) {
    Object oj = iter.next();
}

或者

Object obj = null;
while ( (obj = iter.next())!=null) {
    ....
}

hashNext完全不需要这种方法。

于 2013-04-02T05:10:36.777 回答