ArrayList的扩容(大概)

本文介绍了ArrayList的底层数据结构,分析了ArrayList的构造方法,包括无参构造、指定初始化容量构造和Collection类型的构造,并详细讲解了ArrayList添加元素时的扩容机制,特别是grow()方法的核心逻辑。
摘要由CSDN通过智能技术生成

ArrayList的扩容(大概)

要了解ArrayList的扩容机制就必须要先了解ArrayList的构造以及底层。

一,ArrayList底层数据结构

基本概念:
ArrayList就是动态数组,是List接口的可调整大小的数组实现;除了实现List接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组大小。它的主要底层实现是数组Object[] elementData。

数组的特点:
遍历查询速度快——数组在内存是连续空间,可以根据地址+索引的方式快速获取对应位置上的元素。
但是它的增删速度慢——每次删除元素,都需要更改数组长度、拷贝以及移动元素位置。


二,ArrayList构造方法

对象表示现实世界中某个具体的事物;
抽象是从特定的实例中抽取共同的性质以形成一般化概念的过程;
类是具有共同属性和行为的对象的抽象;
类也称为模板,因为它们提供了对象的基本框架;
类可以定义为数据和方法的集合;

2.1,无参构造方法

源码中的无参构造:
使用默认的size为10的空数组,在构造方法中没有对数组长度进行设置,会在后续调用add方法的时候进行扩容。


//无参构造方法
//构造一个初始容量为 10 的空列表
    public ArrayList() {
   
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }
    
2.2,参数为指定初始化容量的构造方法

源码中的int型构造方法:

指定初始化容量构造
参数大于0,elementData初始化为initialCapacity大小的数组;参数等于0,elementData初始化为空数组;参数小于0,抛出异常;

//源码中有一个int型的构造方法
public ArrayList(int initialCapacity) {
   
     if (initialCapacity > 0) {
   
         this.elementData = new Object[initialCapacity];
     } el
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值