gpt4 book ai didi

java - 了解 iterator.next 功能

转载 作者:行者123 更新时间:2023-12-01 08:05:42 25 4
gpt4 key购买 nike

Iterator<String> ir = arr.iterator();

while(ir.hasNext()) {
String an = ir.next();
System.out.println(an);
}

ArrayList中,ir返回一个指向first的列表对象。现在 ir.next() 必须指向下一个对象。那么为什么它在循环中第一次运行时指向第一个对象呢?

此外,

ListIterator<String> ir= arr.listIterator();

while(ir.hasNext())
{
String an= ir.next();

ir.set(an + '+');

System.out.println(an);
}

为什么它不附加 '+' ?它只是打印原始的ArrayList

最佳答案

hasNext() 只是告诉您如果集合中还有另一个可以迭代的元素。 next() 实际上返回所述元素。光标的初始位置第一个元素之前。

例如,假设您有以下内容:

  0   1   2   3   4
| 8 | 5 | 2 | 3 | 7 |

光标实际上指向第一个元素之前的位置:

    0   1   2   3   4
| 8 | 5 | 2 | 3 | 7 |

^
|
cursor

当您执行hasNext()时,它会检查cursor + 1位置处是否有任何内容。如果您有一个空列表,则 cursor + 1 处没有任何内容(即索引 0 处没有任何内容),因此它将返回 false。如果您位于最后一个元素,则 cursor + 1 == list.size() 这意味着列表末尾之后没有任何内容。如果您位于列表中的其他位置,cursor + 1 是已填充的有效索引,因此它将返回 true

当您实际上执行next()时,它将前进光标并返回新位置处的元素。现在,光标位于新位置,位于下一个元素之前。

现在,内部如何完成实际上并不重要。光标第一次可能指向第一个元素。如果是这种情况,您所需要的只是处理该场景的特殊逻辑(可能是一个用于检查 next() 是否已被调用的标志)。

对于Iterator,您需要了解的是hasNext()会告诉您是否还有可以迭代的剩余元素,并且next() 将返回该元素。此行为在调用之间是一致的,并且在所有实现中应该一致。

关于java - 了解 iterator.next 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21865701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com