【Java 集合框架】Arraylist 进阶

场景:

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

①ArrayList 的底层数据结构实现

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

②ArrayList 添加、删除 实现

add:

remove:

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

栗子:

测试结果:

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

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

④解决方案

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

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

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

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

欧啦,结果是我想要的!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容