Java Collection迭代器remove与removeAll

时间:2019-02-19 10:25:40

标签: java collections iterator

许多初级Java开发人员在运行如下所示的for-each循环时会遇到ConcurrentModificationExceptions

for (String value : values) {
  if ("test".equals(value)) {
    values.remove(value);
  }
}

现在,常见的方法是使用迭代器来解决此问题,因为迭代器的删除功能与集合上的删除功能不同。

我看到的另一个常见解决方法如下:

List<String> valuesToRemove = new ArrayList<>();
for (String value : values) {
  if ("test".equals(value)) {
    valuesToRemove.add(value);
  }
}

values.removeAll(valuesToRemove);

我听说过许多反对Java较新版本中的迭代器方法的争论,因为这被视为解决问题的“旧”方法。

所以我的问题是,哪种方法是最佳实践,为什么?如果有比这两种方法更好的方法,请发表评论并告诉我们原因:)

0 个答案:

没有答案