今天在用java编程时遇到一个小问题,记下来备忘:
Iterator迭代器是遍历List等容器时经常用到的,在使用时一定要注意,如果为Iterator对象进行了初始化或者赋值,那么一旦与Iterator对象关联的容器对象发生变化,则原来的Iterator对象失效,需要重新赋值。
下面举例说明:
ArrayList<Integer> list=new ArrayList<Integer>(); //创建一个ArrayList对象
Iterator<Integer> iterator=list.iterator() //创建Iterator对象,并对其初始化
//为list填充数据
while(distance>0){
list.add(distance);
distance=(distance-1)/3;
}
while(iterator.hasNext()){ //错误,此处的iterator失效,不能调用hasNext()函数
......
}
而下面是正确的写法:
ArrayList<Integer> list=new ArrayList<Integer>();
Iterator<Integer> iterator;//这里没有为Iterator对象赋值
while(distance>0){
list.add(distance);
distance=(distance-1)/3;
}
iterator=list.iterator();//这里为Iterator对象赋值
while(iterator.hasNext()){
......
}