Java中List 删除元素
Posted 傲娇的大王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中List 删除元素相关的知识,希望对你有一定的参考价值。
在Java中,使用List时想要删除某个特定个元素怎么办?很好办!因为List接口有remove()这个方法,我们只需要调用remove()方法,就可以删除list中的某个元素。但是list自带的有一些坑,在相邻有相同元素时会掉坑:
使用list.remove()删除:
我们看到有两个“a”元素相邻,但是删除时却只删除了一个,这是为何呢?因为删除时,每删除一个元素,后边的元素都会左移一位,也就是下标会减1,在for循环中,删除第一个“a”时,i(下标)为0,此时list重排,后边的元素全部左移1位,也就是说第二个“a”元素的下标从1变为了0,而此时for循环进行已经第二次循环了,执行了i++,i的值为1,对应为“b”元素,然后向后循环,再也找不到“a”元素了。所以相邻元素有重复的话,只能删除一个。这明显不符合我们的需求。
那解决办法是什么呢?
1.删除后元素后,i-1
删除一个元素后,后边的元素左移1位,此时i-1,保证了下次循环能访问到左移了1位的元素。
2.反向删除
我们先从后边的元素开始循环,一个一个的往前面循环,找出特定元素删除
这样,就算删除了倒数第一个"a"元素,list重排,也只是把后边的元素左移1位,此时倒数第一个“a”元素(下标为1)被删除,接着b替代了a成为了下标为1的元素,但前边的元素不变,i-- = 0 后依然能够找到其相邻的a元素。
3.使用迭代器删除(iterator)(推荐)
4.赋值给新的list
注意:在进行普通for循环删除时,不要把list.size()抽离出去赋值给变量,然后用此变量做为for条件, 因为删除时,list.size()的值是会改变的,要把list.size作为for条件。
以上是关于Java中List 删除元素的主要内容,如果未能解决你的问题,请参考以下文章