博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基本题目(1)--remove
阅读量:6006 次
发布时间:2019-06-20

本文共 966 字,大约阅读时间需要 3 分钟。

hot3.png

133931_VJJI_2401092.png

一、remove

public static void main(String[] args) {    List
 list = new ArrayList
();    list.add(1);    list.add(2);    list.add(3);    list.add(3);    list.add(4);             for (int i=0; i

如果要遍历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(); //移除该对象        }    }}

 

转载于:https://my.oschina.net/u/2401092/blog/840749

你可能感兴趣的文章
EBS使用 Distributed AD在多个节点并行adpatch
查看>>
windows添加和删除服务
查看>>
多年前写的一个ASP.NET网站管理系统,到现在有些公司在用
查看>>
关于云栖,有点无语的几个地方,管理能不能管?
查看>>
Windows线程的同步与互斥
查看>>
iOS:百度长语音识别具体的封装:识别、播放、进度刷新
查看>>
内核随记(三)--同步(1)【转】
查看>>
C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入
查看>>
MP3是什么
查看>>
AngularJs ng-change事件/指令(转)
查看>>
COGS 144. [USACO Dec07] 魅力手镯【01背包复习】
查看>>
word2007插件开发经验备忘2--如何操作word
查看>>
ExpandableListView 箭头样式
查看>>
【单页应用巨坑之History】细数History带给单页应用的噩梦
查看>>
推荐系统那点事 —— 基于Spark MLlib的特征选择
查看>>
【jQuery】select动态追加的option选中
查看>>
linux系统下安装两个或多个tomcat
查看>>
使用eclipse生成html格式注释文档 [ javadoc ]
查看>>
ProtoBuffer 简单例子
查看>>
Winform开发框架中工作流模块的表设计分析
查看>>