关于java迭代器的next()

目录

温馨提示

java迭代器的基本使用

探究部分

1.

2.

结论


温馨提示

在观看本文前最好先了解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()所代表的是同一元素。

码字不易,如果能起到帮助的话希望留个赞再走。

如文章有不足之处,欢迎评论区指出。

猜你喜欢

转载自blog.csdn.net/m0_72684053/article/details/129786488