【Java集合】ArrayList自动扩容机制

本文深入探讨了Java中ArrayList的扩容机制,重点介绍了`ensureCapacity`方法和`Arrays.copyOf()`在扩容过程中的作用。当ArrayList容量不足时,会将容量扩大至原容量的1.5倍或直接设置为传入的最小容量需求。由于扩容涉及数组复制,频繁插入删除操作在ArrayList上效率较低。建议在预知元素数量时使用ArrayList,否则选择LinkedList。
摘要由CSDN通过智能技术生成

目录

扩充容量的方法ensureCapacity。

Arrays.copyof()方法

总结: 


 

扩充容量的方法ensureCapacity。

ArrayList在每次增加元素(可能是1个,也可能是一组)时,都要调用该方法来确保足够的容量。当容量不足以容纳当前的元素个数时,就设置新的容量为旧的容量的1.5倍加1,如果设置后的新容量还不够,则直接新容量设置为传入的参数(也就是所需的容量minCapacity),而后用Arrays.copyof()方法将元素拷贝到新的数组。从中可以看出,当容量不够时,每次增加元素,都要将原来的元素拷贝到一个新的数组中,非常之耗时,也因此建议在事先能确定元素数量的情况下,才使用ArrayList,否则建议使用LinkedList。

// 确定ArrarList的容量。  
    // 若ArrayList的容量不足以容纳当前的全部元素,设置 新的容量=“(原始容量x3)/2 + 1”  
    public void ensureCapacity(int minCapacity) {  
        // 将“修改统计数”+1,该变量主要是用来实现fail-fast机制的  
        modCount++;  
        int oldCapacity = elementData.length;  
        // 若当前容量不足以容纳当前的元素个数,设置 新的容量=“(原始容量x3)/2 + 1”  
        if (minCapacity > oldCapacity) { 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值