目录
温馨提示
在观看本文前最好先了解java集合,知道迭代器概念和基本使用方法。.
本文是作者个人突发奇想探究而得的结论,仅参考。如果懒得看过程的话可以直接跳到结论。
迭代器学习可参考http://t.csdn.cn/bK94R
java迭代器的基本使用
import java.util.ArrayList;
import java.util.Iterator;
/**
* @author
*/
public class Op {
public static void main(String[] args) {
ArrayList <Integer> it=new ArrayList<>();
it.add(5);
it.add(13);
it.add(25);
it.add(26);
it.add(28);
Iterator <Integer> ui= it.iterator();
System.out.println(it);
while(ui.hasNext()){
System.out.print(ui.next()+" ");
ui.remove();
}
System.out.println();
System.out.println(it);
}
}
输出结果:
[5, 13, 25, 26, 28]
5 13 25 26 28
[]
探究部分
1.
当看到以上代码将集合依序输出并依序删除后,让我想到能不能利用判断语句仅输出删除部分集合中的元素,于是我将while的判断语句略微修改
while(ui.hasNext()&&ui.next()<24)
试着运行一下
[5, 13, 25, 26, 28]
13
[5, 25, 26, 28]
输出结果有点迷惑,怎么在依次输出元素这块,只输出了13,5去了哪里?
2.
我试着先提出一个假设:while(ui.hasNext()&&ui.next()<24)中的ui.next() 和System.out.print(ui.next()+" "); 中的ui.next() 所对应的元素不一样。
然后我再次对代码进行修改,试着插入一个三目运算符来检验
while (ui.hasNext()) {
System.out.print(((ui.next() <= 24) ? ui.next() : 2) + " ");
ui.remove();
}
输出结果:
[5, 13, 25, 26, 28]
13 2 2 2
[5]
和刚才的输出结果都是从13开始输出元素,然后后续元素不满足条件都输出2。
再次假设:我猜测尽管在同个代码里,System.out.print(((ui.next() <= 24) ? ui.next() : 2) + " "); 两个ui.next()所指的元素也是不一样的
什么情况下才能使两个ui.next()所指的元素一样呢?不妨设个变量进行赋值
int b = ui.next();
System.out.print(((b <= 24) ? b : 2) + " ");
再次运行后的输出结果:
[5, 13, 25, 26, 28]
5 13 2 2 2
[]
这次就有输出5了,那么就可以得到结论了。
结论
在使用迭代器时,每个next()所代表的元素都是不同的,会依序改变。
如果在判断循环的条件语句中用到了next(),那么在循环体语句中再次用到next()时,这时的next()所代表的已经是下一个元素
如果想避免这种情况,使两个及以上的next()所代表的是同一元素,可以用变量表示next(),以实现判断和输出的next()所代表的是同一元素。
码字不易,如果能起到帮助的话希望留个赞再走。
如文章有不足之处,欢迎评论区指出。