【Java 集合框架】Arraylist 进阶

场景:

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

①ArrayList 的底层数据结构实现

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

②ArrayList 添加、删除 实现

add:

remove:

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

栗子:

测试结果:

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

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

④解决方案

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

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

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

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

欧啦,结果是我想要的!

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 3,316评论 0 16
  • 中午吃饺子,每人15个。共花费19元。
    敦敏_无我利他阅读 48评论 0 1
  • 在大概的上色后效果...我觉得还可以再深入一点.但是纸太薄了.用的比较差的纸.材料就用彩铅就好了. 我上色的习惯是...
    差太多哥哥阅读 1,054评论 17 18
  • 好几天没写日记了,我去,今天下雨了,买了毛笔在练字哦,买了新琴,弹起来哦,好好生活,早睡早起,多运动爱生活,么么哒...
    十一旧事阅读 40评论 0 0
  • 最近在追的一部剧——《夏至未至》,以前没有看过这本小说,所以看剧的时候没有感觉到太多槽点,也许我本身就是一个不是很...
    米酥阅读 125评论 0 0