java.util.List的remove()方法使用技巧

转载 2016年05月31日 17:55:24
List list;//初始化就不写了
for(int i=list.size()-1;i>=0;i--){
  list.remove(i);
}


一.list.remove(i)

public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(3);
    list.add(4);
         
    for (int i=0; i<list.size(); i++) {
        if (list.get(i) == 3) {
            list.remove(i);//这样写不对,需要写成list.remove(i--) 
        }
    }
         
    System.out.println(list);
}


如果要遍历list进行过滤,比如过滤掉值为3的对象。本以为这代码再简单不过,可还是掉坑里了,上面的代码这样写的话,元素3是过滤不完的。只要list中有相邻2个相同的就过滤不完List调用remove(index)方法后,会移除index位置上的元素,index之后的元素就全部依次左移,即索引依次-1要保证能操作所有的数据,需要把index-1,否则原来索引为index+1的元素就无法遍历到(因为原来索引为index+1的数据,在执行移除操作后,索引变成index了,如果没有index-1的操作,就不会遍历到该元素,而是遍历该元素的下一个元素)。

同样,Map通过keySet()或entrySet()遍历时,不能删除里面的元素,否则会报java.util.ConcurrentModificationException

为了避免出现以上情况,需要对List或Map进行遍历且要进行删除操作时一定要使用迭代器Iterator,通过iterator.remove()来删除。

二.建议使用iterator.remove方法


if (null != list && list.size() > 0) {
    Iterator it = list.iterator();  
    while(it.hasNext()){
        Student stu = (Student)it.next(); 
        if (stu.getStudentId() == studentId) {
            it.remove(); //移除该对象
        }
    }
}


Java编程:删除 List 元素的三种正确方法

删除 List 中的元素会产生两个问题: 删除元素后 List 的元素数量会发生变化; 对 List 进行删除操作可能会产生并发问题; 我们通过代码示例演示正确的删除逻辑package com.ips...
  • claram
  • claram
  • 2016年11月30日 16:44
  • 22558

Java list.remove( )方法需要注意的两个地方

public class Main { public static void main(String[] args) { List stringList = new Arra...
  • anmoyyh
  • anmoyyh
  • 2017年07月24日 14:03
  • 1110

JAVA中LISt遍历时如何remove元素

public class RemoveElementDemo { public static void main(String[] args) { List list = ne...
  • u014401141
  • u014401141
  • 2016年11月28日 12:04
  • 1947

java list如何remove

在java中对list进行操作很频繁,特别是进行list启遍历,这些操作我们都会,也很熟悉,但是对java中list进行删除元素,remove list中的元素就不怎么熟悉了吧,可以说很陌生,是实际操...
  • jiutianhe
  • jiutianhe
  • 2014年01月13日 09:59
  • 2804

Java中List的remove方法

今天被问到一个问题: NumberList是一个存储数字的容器,以下代码执行后容器中的数字是什么? List numberlist = new ArrayList(5);numberli...
  • sunshine__me
  • sunshine__me
  • 2016年09月10日 17:07
  • 10672

java中ArrayList使用remove删除元素时几种常见的问题及解决办法

JException in thread "main" java.util.ConcurrentModificationException at java.util.AbstractList$Itr....
  • sq_better
  • sq_better
  • 2017年02月06日 16:15
  • 5463

关于List的一个小问题——remove()函数

1、问题描述:首先将String数组转换成List对象,然后对其list对象进行查找、删除等操作。 2、我的方案 查找代码如下: String [] s=new String[] {"aaa",...
  • LClansefengbao
  • LClansefengbao
  • 2014年06月12日 10:48
  • 5841

Java list.remove( )方法需要注意的两个地方

list.remove最近做项目的过程中,需要用到list.remove()方法,结果发现两个有趣的坑,经过分析后找到原因,记录一下跟大家分享一下。代码直接上一段代码,进行分析。public clas...
  • DeMonliuhui
  • DeMonliuhui
  • 2017年07月13日 14:41
  • 2392

ArrayList在for循环中使用remove方法移除元素

有时候我们需要在一个ArrayList的for循环中动态删除元素的需求, 废话不多说看代码 List list = new ArrayList(); list.add(0); list.add(1)...
  • u012316120
  • u012316120
  • 2016年05月26日 18:00
  • 10042

使用List中remove方法时需要注意的问题

String str1 = new String("1"); String str2 = new String("2"); String str3 = new String("3"); ...
  • cbjcry
  • cbjcry
  • 2017年04月13日 10:19
  • 5434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java.util.List的remove()方法使用技巧
举报原因:
原因补充:

(最多只允许输入30个字)