Java - List集合中如何删除多个元素? remove( )方法 ?
List集合中的remove方法
-
remove(int index) :移除此列表中指定位置上的元素。
Iteractor的remove方法
-
remove(): 从迭代器指向的 collection 中移除迭代器返回的最后一个元素.
1.使用普通for循环.
/* 删除ArrayList集合中的 "bbb" 元素. */ public class list { public static void main(String[] args) { // 定义ArrayList集合,并存入多个字符串。 ArrayList<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("bbb"); list.add("ccc"); list.add("bbb"); list.add("bbb"); list.add("aaa"); System.out.println("删除之前:"+list); // 使用普通for循环遍历 , 删除元素 bbb for (int i = 0; i < list.size(); i++) { // 判断集合中元素是否和bbb相等. if("bbb".equals(list.get(i))){ list.remove(i); i--; // 重点 - 一定要注意写! } } System.out.println("删除之后:"+list); } } 删除之前:[aaa, bbb, bbb, ccc, bbb, bbb, aaa] 删除之后:[aaa, bbb, ccc, bbb, aaa] <-- 没有i--的情况下: 删除之后:[aaa, ccc, aaa] <-- 有i--的情况下:
为什么要写i- - ?
当删除bbb元素后,下一个元素就会向前移一位 , 而索引继续往后加! 所以删除之后 , 用i- - 回到删除元素时的索引位置继续进行判断.
2.使用倒叙循环.
for (int i = list.size() - 1; i >= 0; i--) { if("bbb".equals(list.get(i))){ list.remove(i); } } 删除之前:[aaa, bbb, bbb, ccc, bbb, bbb, aaa] 删除之后:[aaa, ccc, aaa] <-- 不用写i-- , 就可以删除.
3.使用迭代器.
// 获取集合对应的迭代器,用来遍历集合中的元素的。 Iterator<String> iterator = list.iterator(); while(iterator.hasNext()){ String next = iterator.next(); if("bbb".equals(next)){ // 注意: 不能用list的remove方法. // list.remove(next); // 使用迭代器中的remove()方法,可以删除元素. iterator.remove(); } }
注意:
如果使用list.remove()方法就会报ConcurrentModifiedException(并发修改异常):
什么情况下会出现并发修改异常 ?
在使用迭代器遍历集合的过程中 , 修改了集合的长度(添加/删除元素) ! 注意: 使用迭代器/增强for对 Collection集合或者数组 只能进行遍历 , 不能修改或删除元素 , 否则就会报并发修改异常.
扩展知识点:
Iterator接口中有一个子接口ListIterator(只有list接口下的集合可以使用) ListIterator接口中方法: add(): 添加元素 remove(): 删除元素.
上一篇:
多线程四大经典案例
下一篇:
yum安装指定版本的openJDK