当前位置: 首页 > 面试题库 >

我们是否需要在ArrayList上使用迭代器?

淳于泓
2023-03-14
问题内容

昨天,当我回答使用迭代器并删除时出现ConcurrentModificationException错误的问题时,我添加了一条通知

当您有ArrayLists时,使用迭代器不是一个好主意。

您无需深刻理解该问题即可回答该问题。

在那里,我有两条评论是我错了。

我的论点:

  1. 迭代器不易读取代码。

  2. 有可能引发难以调试的ConcurrentModificationException。

你能解释一下吗?

问题:我们是否需要在ArrayList上使用迭代器?

UPD

这是关于显式使用Iterator的。


问题答案:

带有ArrayLists的迭代器的一个大用例是当您要在迭代时删除元素时。您只有三种安全的解决方案:

  • 使用迭代器及其remove方法
  • 复制要保留在另一个列表中的元素
  • 带有索引的丛林

假设您不在add进行迭代,则使用迭代器 可以避免 使用ConcurrentModificationException

可读性参数是主观的。我个人没有发现明确声明的迭代器不那么可读。这并不重要,因为迭代器是同时迭代和删除的安全方法。



 类似资料:
  • 问题内容: 在回答中,用户说了这样的话:“带有ArrayLists的迭代器的一个大用例是,当您要在迭代时删除元素时”。 即使使用Java中的ArrayList的remove方法也可以实现。我的问题是为什么我们在ArrayList中需要迭代器? 考虑以下代码: 谁能解释迭代器的意义?如果可以用代码解释我,那将是很棒的。 问题答案: 如前所述,迭代器用于迭代数组内容时要删除的内容。如果您不使用迭代器,

  • 我想单独打印ArrayList中的每个值,即{1=[A,B,C,D],2=[E,F,G,H]} 如果用户输入2(即键),则输出应为E F G H

  • 问题内容: 我仍在尝试围绕@Transactional的工作原理。 我在Service类的方法上有注释,而在Repository类中的方法上有注释。带注释的方法是否适用于带注释的存储库中的方法? 我的理解: 在没有数据的类的方法上,将数据写入数据库,而使用时,则将数据写入数据库。 修改查询 修改方法签名只能返回,或者 更新查询必须是事务性的,标记为 Spring Data将删除所有未刷新的未处理更

  • 我正在使用mockito作为junit。在创建对象的模拟时,我有疑问。我有一个名为DBConnect的类。我需要数据库属性,如dbname、凭据等。PatientDetails使用这个类。现在,当我为PatientDetails编写junit时。所以我使用以下代码。 用这个我不能得到正确的结果。

  • 我使用testAd ID(ca-app-pub-3940256099942544/1033173712)从admob不是我的admob ID,我需要使用addTestDevice()太,而在移动设备测试?它甚至显示了测试广告屏幕,而不是实时广告。 因为我这样做了,我整天都在使用我的应用程序进行测试,晚上我收到了账户暂停邮件。

  • 问题内容: 我开始使用RxJS,但我不明白为什么在此示例中我们需要使用类似or 的函数;数组的数组在哪里? 如果有人可以直观地解释正在发生的事情,那将非常有帮助。 问题答案: 当您有一个Observable的结果是更多Observable时,可以使用flatMap。 如果您有一个由另一个可观察对象产生的可观察对象,则您不能直接过滤,缩小或映射它,因为您有一个可观察对象而不是数据。如果您生成一个可观