ArrayList 源码分析 - 删除
ArrayList 源码分析-删除
根据元素进行元素的删除:
复制代码
if (o == null)
如果要删除的值是 null,找到第一个值是 null 的删除for (int index = 0; index < size; index++)
如果要删除的值不为 null,找到第一个和要删除的值相等的删除if(o.equals(elementData[index])
这里是根据 equals 来判断值相等的,相等后再根据索引位置进行删除
根据索引位置进行元素的删除:
复制代码
首先仍然是
modCount++
,记录数组的结构发生变动numMoved
表示删除 index 位置的元素后,需要从 index 后移动多少个元素到前面去减 1 的原因表示 size 从 1 开始算起,index 从 0 开始算起
System.arraycopy(elementData, index+1, elementData, index, numMoved)
表示从index +1
位置开始被拷贝,拷贝的起始位置是 index,长度是 numMovedelementData[--size] = null;
数组最后一个位置赋值 null,帮助 GC 回收无用对象从源码中,我们可以看出,某一个元素被删除后,为了维护数组结构,会把数组后面的元素往前移动
全部删除
复制代码
首先进行空检验
对原数据进行循环校验,如果包含了 remove 元素,则进行替换
根据情况进行数组拷贝/数据全 set null
最后返回
评论