List 集合 使用 remove 踩得坑

阿里 阅读:890 2020-03-31 18:19:02 评论:0
不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。
 
正确例子:
Iterator iterator = list.iterator();
while(iterator.hasNext())
{
String item = iterator.next();
if (删除元素的条件) {
iterator.remove();
}
}

错误写法例子:
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
System.out.println("移除前:" + list);
for (String item : list) {
if ("1".equals(item)) {
list.remove(item);
}
}
System.out.println("移除后:" + list);

运行结果: 移除前:[1, 2] 移除后:[2]

 



将上图中的 "1" 修改为"2" ,结果会出乎你的意料。
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
System.out.println("移除前:" + list);
for (String item : list) {
if ("2".equals(item)) {
list.remove(item);
}
}
System.out.println("移除后:" + list);
如下图:

结果是不是出乎大家的意料,所以如果集合中进行remove、add 操作,请使用正确的例子方式。

 
  

 

 
  
 
标签:java集合
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号