美文网首页The Magnificent JavaJava学习笔记Java
【Java 集合框架】Arraylist 进阶

【Java 集合框架】Arraylist 进阶

作者: JS一沐 | 来源:发表于2017-03-06 15:55 被阅读16次

    场景:

          最近在项目中遇到一个使用ArrayList删除满足条件的数据时,某些满足条件的却没有删除掉的情况,针对该问题进行了对ArrayList的一点深入的学习。

    ①ArrayList 的底层数据结构实现

    查看源码可以看出ArrayList底层数据结构是用数组实现的, 默认数组容量为 10,当添加数据的容量超过了数组的长度,将会自动扩充容量,具体怎么扩充,如下:

    ②ArrayList 添加、删除 实现

    add:

    remove:

    ③使用for 循环 进行删除出现BUG的原因

    栗子:

    测试结果:

    从结果中可以看出满足年龄条件为20 的记录并没有删除完毕。为什么会出现这种情况呢,看看 remove() 方法的实现我们就能知道答案:

    当数组根据下标进行删除之后,数据进行了移位操作,所以当前 index 的后一个数据总会被过滤掉,不能被删除,画个图对移位操作进行解释:

    ④解决方案

    针对③的情况,我们知道,是因为在对数组进行删除时,数据进行了移位,针对这个原因,我们可以有两种解决方案:

    way1:删除操作后,对数组下标进行减1 操作

    way2:使用 Iterator 进行对ArrayList 进行迭代 删除操作

    再来看看输出的结果是否满足我们的期望:

    欧啦,结果是我想要的!

    相关文章

      网友评论

        本文标题:【Java 集合框架】Arraylist 进阶

        本文链接:https://www.haomeiwen.com/subject/jsqcettx.html