创建List集合

1
2
3
4
5
List<String> stringList = new ArrayList<>();
stringList.add("a");
stringList.add("a");
stringList.add("b");
stringList.add("c");

删除

for循环

正向删除

每删除一次必须进行一次i--,因为stringList.size()在减少,否则List集合中连着的两个元素都相同的话,删除这个相同的元素时就只能删除一个。因为删除第一个元素时下一个以及之后的元素的索引会在原来的基础上-1,而i的值经过一次循环后就+1了,由于下一个元素的索引变成了被删除元素的索引,所以循环会跳过要删除的第二个元素,那么会出现等于要删除的值的元素删不完的情况

1
2
3
4
5
6
for (int i = 0; i < stringList.size(); i++) {
if (stringList.get(i).equals("a")) {
stringList.remove(i);
i--;
}
}

反向删除

可以直接删除,不需要进行其他的操作

1
2
3
4
5
for (int i = stringList.size() - 1; i >= 0; i--) {
if (stringList.get(i).equals("a")) {
stringList.remove(i);
}
}

迭代器

1
2
3
4
5
6
Iterator iterator=stringList.iterator();
while (iterator.hasNext()) {
if (iterator.next().equals("a")) {
iterator.remove();
}
}

Stream

得到新的List集合就是去掉目标元素的集合

1
List<String> stringList1=stringList.stream().filter(s -> !s.equals("a")).collect(Collectors.toList());

PS.

不能使用foreach循环,用foreach删除list元素的时候只有删除倒数第二个元素时不会报错

详细原因查看:foreach遍历list删除元素一定会报错?