java源码分析07-ArrayList

本文深入剖析了ArrayList的内部结构,包括其默认容量、序列化ID等属性,以及构造方法、如何实现动态数组功能并进行扩容等核心机制。此外还介绍了ArrayList继承自AbstractList并实现了多个接口,以及提供了具体的操作方法。
摘要由CSDN通过智能技术生成

我爱你是多么清楚多么坚定的信仰!

今天我们来看下ArrayList的内部结构。

1.类的结构



2.类结构解析

属性:

serialVersionUID:序列化ID

默认容量为10

private static final int DEFAULT_CAPACITY = 10;

 /**
     * Shared empty array instance used for empty instances.
     */
    private static final Object[] EMPTY_ELEMENTDATA = {};

    /**

这段代码表名ArrayList的内部是Object数组的形式存在。那么我们就很好奇为什么ArrayList可以实现动态数组的功能呢?它是怎么实现动态数组的功能的?它怎么扩容?

 private transient Object[] elementData;

    /**
     * The size of the ArrayList (the number of elements it contains).
     *
     * @serial
     */
    private int size;

size表示数组中元素的个数,由于数组不一定完全装满,所以size一般小于数组的实际容量。

public ArrayList() {
        super();
        this.elementData = EMPTY_ELEMENTDATA;
    }


 public ArrayList(int initialCapacity) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
    }
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

ArrayList继承自AbstractList这个抽象类,实现了4个接口

List接口


这个接口的方法:集合大小size(),是否为空isEmpty(),是否包含contains(Object),下标查询indexOf(Object),上一次出现的下标lastIndexOf(Object),清空集合clear()

增删改查:add(E),add(int,E),allAll(Collection),add(int,Collection),set(int,E),删除某个下标对应的对象remove(int),get(int)

迭代输出:iterator(),listIterator(),listIterator(int),subList(int,int)

比较:equals(Object),hashCode()


ArrayList的基本功能:

 public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }
private void ensureCapacityInternal(int minCapacity) {
        if (elementData == EMPTY_ELEMENTDATA) {
            minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
        }

        ensureExplicitCapacity(minCapacity);
    }

    private void ensureExplicitCapacity(int minCapacity) {
        modCount++;

        // overflow-conscious code
        if (minCapacity - elementData.length > 0)
            grow(minCapacity);
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值