Java——ArrayList的add()原理解析和remove()遇到的坑

本文探讨了Java中ArrayList的add()和remove()方法的性能影响。add()方法虽然常量时间复杂度,但扩容可能导致性能下降,建议预估容量以减少扩容。remove()方法由于涉及数组元素移动,时间复杂度为O(n),应尽量删除末尾元素。同时,文章通过源码分析了ArrayList的扩容机制,并举例说明了remove()操作的常见误区及正确删除方式。
摘要由CSDN通过智能技术生成

       虽然ArrayList是可变数组,但是为了提高性能我们在使用中应尽量提前估算容量,add()的时间复杂度为O(1),但是扩容会拉低性能,所以定义时应估算容量,减少扩容次数;remove()方法,每次删除要移动后边数组,所以时间复杂度为O(n),为提高性能,尽可能删除最后的数据。

一.Add()源码解析

数组扩容这是对ArrayList效率影响比较大的一个因素,虽然ArrayList可以自己扩容,但是扩容过程的空间复杂度应该是O(2n),因为需要拷贝一个次旧的数组。

现在看一下源码:

构造函数

new ArrayList()返回的是一个空的Object,所以新建的ArrayList初始容量为零。

new ArrayList(K)当K>0时,开辟K个空间;K=0,返回空的Object。

    private static final int DEFAULT_CAPACITY = 10;
    private static final Object[] EMPTY_ELEMENTDATA = {};
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
    transient Object[] elementData; 
    private int size;
    public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }
    public ArrayList(int initi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值