许多初级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较新版本中的迭代器方法的争论,因为这被视为解决问题的“旧”方法。
所以我的问题是,哪种方法是最佳实践,为什么?如果有比这两种方法更好的方法,请发表评论并告诉我们原因:)