java迭代器退出迭代_使用Java迭代器修改数据时要小心

本文讲述了在Java中使用迭代器时,如果在迭代过程中修改基础集合可能导致的不可预测行为。通过一个示例问题,讨论了迭代器的规则,特别是`remove()`方法的使用,并强调了修改数据结构可能引发的问题,包括遍历不完整和数据一致性破坏。文章提醒开发者要谨慎处理可变数据类型,特别是在迭代时。
摘要由CSDN通过智能技术生成

java迭代器退出迭代

随着本学期的结束,我想我会分享一个关于如何非常熟悉Java迭代器的小故事。

现实世界语境

就上下文而言,我开设了第二年软件组件课程,这是尝试进入该专业的学生的最后障碍。 当然,这门课程对学生来说压力很大,我经常必须加倍努力,为他们提供一切成功的机会。

不幸的是,本学期我们被大流行所笼罩,不得不转换为在线教学。 结果,我们不得不对教学做出一些快速决策,从而改变了学生的学习方式。 尤其是,我们将所有纸笔考试转换为在线测验。

对于某些学生来说,这是一个很大的祝福。 毕竟,这些测验并没有比考试更困难,因此我们将其设为公开考试。 换句话说,我们使课程变得更容易让他们通过。

当然,学生遍布世界各地,他们无法获得所需的帮助。 此外,学生没有像考试那样认真地学习。 这种结合创造了一些非常糟糕的测验分数。

到我们进行第四个测验时,学生们已经非常沮丧。 实际上,我从几位教师那里听说,他们的学生已经厌倦了“技巧性问题”。 作为一名讲师,听到这有些令人沮丧,因为它们是非常典型的考试问题。 我们并没有为他们增加困难,但这是我第一次听到这些抱怨。

示例问题

然后,发生了一些奇怪的事情。 我们给了他们一个我真的不知道答案的问题,结果有点类似以下内容:

以下代码片段后面的Set <NaturalNumber> nums变量的值是什么?

 Set<NaturalNumber> nums = new SomeSetImplementation<>();  nums.add( new NaturalNumber2( 1 ));  nums.add( new NaturalNumber2( 5 ));  nums.add( new NaturalNumber2( 6 ));  for (NaturalNumber n : nums) { 
     n.increment();  } 

当然,学生的选择如下:

  • nums = {1,5,6,2,6,7}
  • nums = {2,6,7}
  • nums = {1,5,6}
  • 从提供的信息中无法分辨。

现在,就上下文而言,此示例中有一些内部组件。

首先,NaturalNumber是一个可变类,它表示无界的非负整数。 换句话说,NaturalNumber的范围可以从零到无穷大。 此外,可以使用一系列基本数学运算来修改NaturalNumber,如下所示:

  • increment()加1 this
  • add(NaturalNumber n) :将n添加this

此外,这个问题让使用的Set是类似于一个数学集合。 这里的想法是Set具有两个主要属性:

  1. Set缺少重复项(即{1,2,1}不是合法集合)。
  2. Set是无序的(即{1,2,3}和{3,2,1}是等效的)。

作为参考,如果您有兴趣阅读更多详细信息,请在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值