文档章节

基本题目(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: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
移除数组中的元素

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

bug_killer
2017/12/24
0
0
使用Swift模拟Window-LFU

今天参加了某公司2015的校招的机试,大题开放题比较多,有一道大题是Window-LFU比较有意思,当时题目搞了半天没搞明白让干啥- -题目大概是这样的:实现一个Window-LFU缓存(其实就是用数组去...

cwift-tal
2015/08/23
0
0
java-多线程-一道阿里面试题分析

传说这是阿里的一道面试题: 也传说发这道题出来的作者去了tmail。下面是关于题目的描述: 这段代码大多数情况下运行正常,但是某些情况下会出问题。什么时候会出现什么问题?如何修正?可见博...

李国刚
2012/12/16
0
19

没有更多内容

加载失败,请刷新页面

加载更多

申请Let's Encrypt永久免费SSL证书

环境安装 1、安装git yum install git-core 2、安装python 系统自带 不用安装 只要版本大于2.7即可。 获取Let's Encrypt免费SSL证书 先停止nginx 在阿里云安全组里加入 443端口的入规则 git ...

HGMrWang
30分钟前
1
0
如何使用playframework进行更好的开发

1: 自定义基类Controller 相信刚开始使用Play的人写的Controller 都继承于 play.mvc.Controller , 但这并不是一个很好的选择,自建基类Controller可以扩展更多的功能。 1.1 验证功能。 后台...

tuerqidi
34分钟前
4
0
解决ubuntu下root用户 不能ftp登陆的问题

解决ubuntu下root用户 不能ftp登陆的问题 一般情况下,由于种种原因ftp是不让root用户远程登陆,但只要你修改以个文件就可以登陆了. 注释掉 /etc/ftpusers 中的root即可 (最后重启vsftpd serv...

15834278076
46分钟前
0
0
《JavaScript高级程序设计(第3版)》阅读笔记

第6章 面向对象的程序设计 6.2 创建对象 6.2.1 工厂模式 JavaScript创建对象(一)—— 工厂模式 6.2.2 构造函数模式 JavaScript创建对象(二)——构造函数模式 6.2.3 原型模式 JavaScript...

Bob2100
51分钟前
1
0
Windows小技巧 – Win+R提高Windows使用效率

追求效率的朋友都需要一款顺手的快速启动工具,Win 平台上有键盘流的RunZ、Listary、ALTRun、Launchy、Wox 和图标流的 Fences、Rolan、 WinLaunch 等,而 Mac 上也有 Alfred、Spotlight。 而...

QQZZFT
53分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部