java中iterator的Next()遍历完之后怎么回到起点
List<String>coll=newArrayList<String>();//LinkedList();//ArrayList();;coll.add("is");...
List<String> coll = new ArrayList<String>(); //LinkedList(); //ArrayList();;
coll.add("is");
coll.add("Sunday.");
// Output all elements by iterator
Iterator it = coll.iterator();
System.out.println(it.hasNext());
while(it.hasNext()) {
System.out.println(it.next() + " ");
}
如题
有没有好的方法
还有
Iterator it = coll.iterator();为什么要放在coll.add();之后 不然会出错 展开
coll.add("is");
coll.add("Sunday.");
// Output all elements by iterator
Iterator it = coll.iterator();
System.out.println(it.hasNext());
while(it.hasNext()) {
System.out.println(it.next() + " ");
}
如题
有没有好的方法
还有
Iterator it = coll.iterator();为什么要放在coll.add();之后 不然会出错 展开
2个回答
展开全部
重新得到一个新的 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 与其它集合相对它是有序的。
}
如果你的集合中都没东西,你当然就没有“遍”的必要,当然是我们往集合中添加了东西我们才要遍历一下看一下其中的东西嘛。不过有一点,在迭代的过程中不能直接修改集合。比如:
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 与其它集合相对它是有序的。
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询