ArrayList底层原理

Posted 陕西五花肉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayList底层原理相关的知识,希望对你有一定的参考价值。

add 添加底层源码原理:

ArrayList底层使用的是Java数组来存储集合中的内容,这个数组是Object类型的

elementData的访问级别为包内私有,是为了使内部类能够访问到其中的元素

代码中有个常量,表示数组的默认容量,大小为10:

扩容规则:

最初 10个容量 下来15 22 33 49

下次扩容的 容量=之前容量+他的一半

容量1015223349
扩容次数1(默认初始)2345
//扩容的源码 

private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

get

首先判断 index是否在范围内

// 获取元素
public E get(int index) {
        rangeCheck(index);

        return elementData(index);
    }

remove

 public E remove(int index) {
        rangeCheck(index);

        modCount++;
        E oldValue = elementData(index);

        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);       //
        elementData[--size] = null; // clear to let GC do its work

        return oldValue;
    }

set

public E set(int index, E element) {
        rangeCheck(index);

        E oldValue = elementData(index);
        elementData[index] = element;
        return oldValue;
    }

以上是关于ArrayList底层原理的主要内容,如果未能解决你的问题,请参考以下文章

ArrayList底层原理

arraylist底层原理jdk11和1.8区别

浅谈ArrayList的底层扩容的原理

ArrayList 从源码角度剖析底层原理

用大白话告诉你ArrayList的底层原理

秋招之路1:ArrayList的底层实现原理