最近咋使用
list.remove
方法的时候出了点问题。。。
贴出来,记录下。
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> list = new ArrayList();// =null error
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.add(7);
list.add(8);
for (int i = 0; i < list.size(); i++) {
if (list.get(i) > 4)
list.remove(i);
}
System.out.println(Arrays.toString(list.toArray()));
}
假定我们的代码如上。就是想把list里面大于4的值都remove掉,然后得到的list。
可是这个程序在运行后,会按照预期的值,打印出来的结果都是小于4的吗???
打印结果为:[1, 2, 3, 4, 6, 8]
答案是否定。主要是使用 i 下标在 list 内索引时,由于使用了remove会导致list内部的数组总值也就是length
变小,从而导致使用i在数组内索引时会导致空过一个元素。
解决办法有两个:
第一个将i从list.size()-1 开始索引,从后向前遍历就不会出问题的。
还有就是使用 迭代 Iterator 。
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
if (it.next() > 4) {
it.remove();
}
}
这个可以主要是ArrayList内部的iterator返回的Iterator对象的remove方法在remove过之后会将当前索引值 减一。
相关内部实现为:
public void remove() {
if (lastRet == -1)
throw new IllegalStateException();
checkForComodification();
try {
AbstractList.this.remove(lastRet);
if (lastRet < cursor)
cursor--;
lastRet = -1;
expectedModCount = modCount;
} catch(IndexOutOfBoundsException e) {
throw new ConcurrentModificationException();
}
}
从而可以成功的达到我们的目的。
分享到:
相关推荐
关于LIstCtrl的一些总结,里面知识还算全。。
在C#的List集合操作过程中,如果要获取List集合中的第一个元素对象,则一般会先通过获取到list[0]这种方式来获取第一个元素。 其实在List集合中提供了获取最后一个元素的First()方法,调用此方法可直接获取List集合...
关于access-list访问列表的知识总结
如下所示,一起跟随小编过来看看吧! list01 = [‘alex’,12,65,’xiaodong’,100,’chen’,5] list02 = [67,7,’jinjiao_dawang’,’relax1949′,53] #打印list01、list02 print(list01) print(list02) #列表...
【ASP.NET编程知识】C#将DataTable转化为ListT.docx
里边包含了如何定义一个List类以及相关的子类声明与使用。这也是小编在刚开学学习JavaSE时记录的一些笔记,里面的内容非常适合JavaSE入门者学习,都是浅显易懂的话语,没有太多的官方话,绝对是你初学JavaSE的宝典,...
很多初学C#编程的人可能对泛型列表List的使用不是很清楚,希望这个例子能帮助大家.
自己写的一个控件数组的实例,基于C#2012的 List集合中装载控件数组的方式,比较实用。参考了网上的一些零碎的知识,整理而成,取之网络,用之与网络。
SwiftUI List 组件非常方便快捷地显示各类数据,但是目前原生没有自带在选择其中一个时为单元格着色。因为不仅是开箱即用的,所以有几种解决问题的方法。这是我的解决方案,它还可以解决以下事实:选择单元格并不像...
目的:每一个开发人员都应该形成自己的知识体系,做到提纲挈领。在设计代码,聊技术,面试,系统结构设计,架构设计等时候,能够游刃有余,充满自信。 特点: 1、前端领域:Html和css基….zip 适合学习/练手、毕业...
微信小程序-todo list源码。资源中包含了详细的系统图文搭建教程。源码都是实际项目,经过测试可以正常稳定运行在服务器,需要具备基础服务器搭建知识,不会搭建的请谨慎购买。
python入门基础语法,python的List和Tuple类型知识点及代码举例
2) 使用 list() 函数创建列表 Python 提供了一个内置的函数 list(),使用它可以将其它数据类型转换为列表类型 #将字符串转换成列表 list1 = list("hello") print(list1) #将元组转换成列表 tuple1 = ('Python', '...
学习C++必经之路,入门级知识总结,笔记本知识概况,走一步再走一步
学习C++必经之路,入门级知识总结,笔记本知识概况,走一步再走一步
序列中的每个元素都分配一个数字 – 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。 Python有6个序列的内置类型,但最常见的是列表和元组。 序列都可以进行的操作包括索引,切片,加,乘,检查成员...
Java集合知识图谱 ,包含map,list,set 用于学习及翻阅使用
不仅自己编写的链表,同时可以调用STL中的list的模板。。是学习链表的基础知识。
在本篇内容里小编给大家整理了关于Python List cmp()用法相关知识点,有需要的朋友们跟着学习下。