一、普通for循环结合remove删除
这种方式存在缺点,就是会漏删。
当使用普通的for
循环(即for (int i = 0; i < list.size(); i++)
)遍历List
时,每次循环都会根据当前的索引i
来访问列表中的特定元素。然而,在遍历过程中如果直接删除元素,会导致列表的大小发生变化,进而影响后续元素的索引。
一般会执行i--的操作,以达到避免漏删的情况。
java
public void listRemove()
{
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
for (int i = 0; i < list.size(); i++) {
if (list.get(i) % 2 == 0) {
list.remove(i);
i--;
}
}
System.out.println("剩余元素:" + list);
}
二、普通for循环倒叙删除
倒叙删除主要是结合数组的特点,从尾部删除不会导致下标索引发生改变。
java
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
for (int i = list.size() - 1; i >= 0; i--) {
if (list.get(i) % 2 == 0) {
list.remove(i);
}
}
System.out.println("剩余元素:" + list);
}
三、迭代器循环
java
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer element = iterator.next();
if (element % 2 == 0) {
iterator.remove();
}
}
System.out.println("剩余元素:" + list);
}
四、使用Stream流
java
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
// 使用 Stream 过滤出奇数元素,重新生成一个新的列表
List<Integer> filteredList = list.stream()
.filter(element -> element % 2!= 0)
.collect(Collectors.toList());
System.out.println("剩余元素:" + filteredList);
}
五、使用removeIf
java
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
// 使用 removeIf 删除偶数元素
list.removeIf(element -> element % 2 == 0);
System.out.println("剩余元素:" + list);
}