为什么在迭代过程中看不到Iterator的修改?

斯蒂芬:

在学习了一段时间的Java之后,我决定修改listIterator方法。所以我做了下面的简单代码:

List<String> colors = new ArrayList<>();
colors.add("red");
colors.add("blue");
colors.add("green");

ListIterator<String> iterator = colors.listIterator();

while (iterator.hasNext()){
    String color = iterator.next();
    System.out.println(color);

    if (color.equals("blue")){
        iterator.add("yellow");
    }
}

我期望的是迭代器'yellow'在之后添加'blue'但是当我运行它时,我感到惊讶。结果是:

red-blue-green

而且不像我预期的那样:

red-blue-yellow-green

迭代器 add()不更新迭代过程中的收集迭代器的方法有什么意义?是的,如果我要致电,它将为我显示所有4种颜色。但是为什么不简单添加以便Iterator可以“看到”它呢?System.out.println(colors)'yellow'

绿巨人:

首先,就是这样,因为它是这样指定的:

用于ListIterator.add的JavaDocs

新元素将插入到隐式光标之前:对next的后续调用将不受影响,而对Previous的后续调用将返回新元素。

我想这个决定背后的原理是这样的:如果您只是添加了一个元素,通常不希望在下次调用时立即对其进行处理next()相反,大多数情况下,您只想在开始迭代之前根据集合中包含的元素将元素添加到集合中。您已经知道刚刚添加的元素,因此可以直接进行它需要的任何处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在Windows 7安装过程中看不到我的USB驱动器?

为什么在TFS中看不到分支树?

为什么在C#中看不到Ping类?

为什么在SSMS结果列表中看不到全名?

为什么在图形绘制中看不到弯曲的边缘?

为什么在 QGraphicsScene 中看不到 QGraphicsWidget 的选择边框?

为什么在PowerShell中看不到脚本的参数?

为什么在UIScrollView中看不到UIStackView?

为什么我在gdb backtrace中看不到行号?

为什么在Swift中看不到图像?

为什么在Nautilus中看不到缩略图?

为什么我的GridView对象在代码中看不到?

为什么在cloudboost中看不到我的表?

为什么模块在引擎代码中看不到类?

在检查过程中看不到交易的手动签名(结构1.4)

为什么ps看不到睡眠过程?

为什么我的SelectionGrid在Unity Editor中看不到GameObject?

为什么在Windows 10上已安装的应用程序中看不到WIndows Powershell

为什么在新打开的窗口中看不到glyphicon图标?

为什么在终端输出中看不到单位分隔符(ASCII 31)?

为什么在同一包装中看不到包装保护方法?

为什么在优胜美地的Xcode中看不到iOS 7.0模拟器?

为什么在此Java动态Web项目中看不到任何主要方法?

为什么在dfs.data.dir指定的路径中看不到阻止文件?

为什么我在 Fabric 中看不到我的 android 应用程序图标?

为什么在调用函数中看不到 putTMVar 的函数中填充了 TMVar?

为什么我的Java文件在我的R文件中看不到新元素?

为什么python在virtualenv中看不到dist-packages?

为什么在 Next.js 项目中看不到轮播?