ArrayList
⭐add(E e)方法说明:添加元素的时候需要先判断数组容量是否可以容纳新添加这个元素,首先会比较原数据的长度和添加后数组长度,是否超出原数组长度;
1.如果没有超出,则直接将该新增元素添加到该数组中;
2.如果超出,则进行扩容。
2.1正常情况扩容为原数组长度的1.5倍,然后再与添加后数组长度进行比较,
2.1.1)如果仍然比添加后的数组长度小,那么直接使用添加后数组的长度进行扩容;
2.1.2)如果发现扩容后的数组长度比最大数组长度MAX_ARRAY_SIZE还要大,则进行超大扩容,
在此之中先判断是否已经溢出,
如果没有溢出,则进行判断该长度是否比MAX_ARRAY_SIZE,如果比MAX_ARRAY_SIZE大,则使用Integer.MAX_VALUE;反之则使用MAX_ARRAY_SIZE(Integer.MAX_VALUE-8);
2.2最后使用Arrays.copyOf进行旧数据填充到新数组中
⭐remove(int index)
1.首先先判断你要删除的索引下标是否越界,越界则抛出异常
2.然后找到指定要删除的索引下标的元素,并计算删除后需要移动后续元素的个数
3.最后调用System.arraycopy这是一个本地方法,将后续元素的微信进行前移
public static native void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);
⭐get(int index)
1.先比较索引值与数组长度,如果索引值比数组长度大,则抛出异常
2.返回该索引下标元素
⭐set(int index, E element)
1.先比较索引值与数组长度,如果索引值比数组长度大,则抛出异常
2.取出该索引指向的旧元素
3.将新元素E element覆盖到该索引位置
4.返回旧元素
复习ArrayList源码增删改查
最新推荐文章于 2023-07-03 17:13:25 发布