文档章节

基本题目(1)--remove

oswebgod
 oswebgod
发布于 2017/02/17 13:41
字数 359
阅读 7
收藏 0

一、remove

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(); //移除该对象
        }
    }
}

 

© 著作权归作者所有

共有 人打赏支持
oswebgod
粉丝 7
博文 62
码字总数 141571
作品 0
浦东
私信 提问
程序员进阶之算法练习(三十五)LeetCode专场

前言 LeetCode上的题目是大公司面试常见的算法题,今天的目标是拿下5道算法题: 题目1是基于链表的大数加法,既考察基本数据结构的了解,又考察在处理加法过程中的边界处理; 题目2是求数组出...

落影loyinglin
12/11
0
0
LeetCode:Remove Nth Node From End of List 移除链表倒第n项

1、题目名称 Remove Nth Node From End of List(移除链表中倒数第n项) 2、题目地址 https://leetcode.com/problems/remove-nth-node-from-end-of-list/ 3、题目内容 英文:Given a linked ......

北风其凉
2015/08/06
0
0
LeetCode:Nim Game - 尼姆博弈

1、题目名称 Nim Game(尼姆博弈) 2、题目地址 https://leetcode.com/problems/nim-game/ 3、题目内容 英文: You are playing the following Nim Game with your friend: There is a heap......

北风其凉
2015/12/20
263
0
程序员进阶之算法练习:LeetCode专场

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由落影发表 前言 LeetCode上的题目是大公司面试常见的算法题,今天的目标是拿下5道算法题: 题目1是基于链表的大数加法,既考...

腾讯云加社区
11/26
0
0
移除数组中的元素

题目描述 移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组 示例1 输入 [1, 2, 3, 4, 2], 2 输出 [1, 3, 4] // 常规方法 function remove(arr, item) {...

bug_killer
2017/12/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

崛起于Springboot2.X之集成工作流Activiti5.22(42)

声明:该博客主要是Springboot1.X和Springboot2.X集成Activiti5.22版本,并说一下两个版本的搭建不同的地方 技术:Springboot2.0.3+mysql+jpa(自动生成25张表)+Activiti5.22 /然后Springboo...

木九天
7分钟前
0
1
windows环境下搭建rabbitMQ开发环境

windows环境下搭建rabbitMQ开发环境 下载与安装 erlang rabbitmq 是使用erlang语言开发的,所以需要erlang环境; 下载地址 rabbitmq 下载地址 rabbitmq与erlang版本关系 下载之后直接安装即可...

晨猫
18分钟前
0
0
JVM 中的守护线程

特点 通常由JVM启动 运行在后台处理任务,比如垃圾回收等 用户启动线程执行结束或者JVM结束时,会等待所有的非守护线程执行结束,但是不会因为守护线程的存在而影响关闭。 判断线程是否为守护...

小刀爱编程
22分钟前
1
0

参考 极客时间《数据结构与算法之美》

grace_233
34分钟前
2
0
谈谈KMP算法

KMP算法的资料网上已经一大把了,主要用来解决某个文本片段是否包含另一个子串问题。这里假设文本片段的长度n大于子串长度m,如: 文本串为ABCDABGHIJK 子串为 ABCDABE 在传统的暴力解法中当...

FAT_mt
36分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部