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.remove( )方法需要注意的两个地方

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

Vim编辑器的使用技巧

0、进入输入模式的命令 i 在光标 左侧输入正文[常用] a 在光标 右侧输入正文[常用] o 小写字符o, 在光标所在...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

tableView上的按钮功能

先看看效果

PNG的使用技巧

Png是图像文件存储格式,在网页设计中已经不是一个陌生的名词,在前端开发中经常使用到它,如常用CSS 雪碧图。而Png的使用不仅仅如此,Png有多少种格式,有哪些特点,PC端中常用的Png格式是哪些,...

活动的最佳实践--第一行代码

活动的最佳实践 1、知晓当前是哪个活动 首先新建一个类BaseActivity继承自Activity,然后在BaseActivity中重写OnCreate()方法,如下: package com....

HTML5-Canvas画布的使用

一,首先让我们来了解一下CSS solid属性 solid的意思为:solid.adj 固体的,实心的,结实的,可靠的                         ...

EXCEL电子表格使用技巧大全

01、如何在已有的单元格中批量加入一段固定字符?   例如:在单位的人事资料,在excel中输入后,由于上级要求在原来的职称证书的号码全部再加两位,即要在每个人的证书号码前再添上两位数13,如果...

ue使用技巧

本文转自http://space.itpub.net/12350275/viewspace-682549   以下是网上摘录的UE 技巧 1)删除空行: 替换 %[ ^t]++^p 为 空串  ...

Android开发_SQLite使用方法技巧

SQLite介绍 SQLite是轻量级的、嵌入式的、关系型数据库,目前已经在iPhone、Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠。SQLite嵌入到使...

VC6使用技巧

VC6使用技巧,可以提高开发效率。
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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