java list的remove方法问题
Posted 晨港飞燕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java list的remove方法问题相关的知识,希望对你有一定的参考价值。
使用list集合存储数据的时候,明明感觉用remove方法删除其中一个对象没有问题,但是后台却报错,如何解决这个问题呢?
删除时,可以直接删除这个对象,则不会报错,加入List<User> list;
则删除时list.remove(user);
若使用如下方式则容易出问题
for (int i = 0; i < list.size(); i++)
list.remove(i);
// i--;
//System.out.println(i+" "+list.get(i)+" ");
运行结果如下:
报错原因如下: List每remove掉一个元素以后,后面的元素都会向前移动 ,此时如果执行i++,则刚刚移过来的元素没有被读取
所以直接删除这个对象,即使元素位置移动,但是我们删除时是直接取的对象,所以不会报错,注意:直接删除对象,会把所有符合删除条件的对象全都删除。
解决方法请接着往下看:
解决方法:
1、每移动一次后,再把i移动回来
2、删除时,从后往下删,先删除后面的元素
3、iterator删除(此方法有待进一步验证)
以下两种示例均为正确写法(运用的原理就是直接删除对象的思路)
上述方法取值删除时,最终取的是对象的值,这样可以解决该报错问题。
list的remove()报错后的解决思路:使用remove()的方法时,要先从大到小的位置移除。当然如果你知道具体的对象,直接移除remove(对象)更稳妥。
总结
1、使用remove()的方法时,要先从大到小的位置移除。当然如果你知道具体的对象,直接移除remove(对象)更稳妥。(注意,根据我的经验,这种移除对象方法,有bug,改用了iterator)
2、要密切注意自己调用的remove()方法中的,传入的是int类型还是一个对象,直接删除对象时,前提是list中存储的是对象数据,此时删除需额外注意。
原文:百度安全验证
以上是关于java list的remove方法问题的主要内容,如果未能解决你的问题,请参考以下文章