为了账号安全,请及时绑定邮箱和手机立即绑定

java中iterator的Next()遍历完之后怎么回到起点

java中iterator的Next()遍历完之后怎么回到起点

阿波罗的战车 2019-03-02 16:03:02
List<String> coll = new ArrayList<String>(); //LinkedList(); //ArrayList();;coll.add("is");coll.add("Sunday.");// Output all elements by iteratorIterator it = coll.iterator();System.out.println(it.hasNext());while(it.hasNext()) {System.out.println(it.next() + " ");}如题 有没有好的方法还有 Iterator it = coll.iterator();为什么要放在coll.add();之后 不然会出错
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

重新得到一个新的 Iterator 对象(还是调用 coll.iterator())。所谓遍历嘛,你已经“遍”过,下次再“遍”当然要重新开始了。

如果你的集合中都没东西,你当然就没有“遍”的必要,当然是我们往集合中添加了东西我们才要遍历一下看一下其中的东西嘛。不过有一点,在迭代的过程中不能直接修改集合。比如:
for(Iterator iter = list.iterator(); iter.hasNext(); ) {
list.add("afewfe"); // 这个操作是非法的,它导致 iter 内缓存的位置索引失效,结果不可预料。
}

Java 中的迭代器是指你想对集合中的每一个元素做个操作,这个时候就不能再在不通知迭代器的情况下直接改这个集合了,通常我们为了确保迭代器在迭代过程中的位置索引是有一致的,我们支持的修改操作很有限,比如:
for(Iterator iter = list.iterator(); iter.hasNext(); ) {
Object current = iter.next();
// 如果是我们想找的,删除它。
if ( current == aaa) {
iter.remove(); // 删除当前的。这个时候迭代器知道我们修改了集合,而且我们只能删除当前位置的东西,这个迭代器内部的位置索引就没有问题,如果我们删除任意位置的元素,那么迭代器当前保持的位置索引就没有意义,因此不能直接 add 或 remove 任意位置,只能通过迭代器来删除当前位置的。
}
}

for(ListIterator iter = list.listIterator(); iter.hasNext(); ) {
// 这个 ListIterator 比 Iterator 多些方法可用,因为 List 与其它集合相对它是有序的。
}



查看完整回答
反对 回复 2019-03-09
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

关于iterator的Next()遍历完之后怎么回到起点,你可以重新it=coll.iterator(),就可以回到起点。

查看完整回答
反对 回复 2019-03-09
  • 2 回答
  • 0 关注
  • 1916 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信