Java 1.8下ArrayList的扩容机制

扩容机制简述 扩容算法是基于方法grow()的,ArrayList的几个构造参数,决定了在初始状态下,容器的大小要么为0要么为自己设定的某个值。那么具体的扩容,就是在add()等方法进行的时候进行一次判定——如果有数组溢出的风险,那么就进行扩容。 扩容的时候先判定数组大小。数组是空或者小于10,那么在扩容的时候将数组直接分配大小到10。这也是一部分人认为Arra...
摘要由CSDN通过智能技术生成

扩容机制简述

        扩容算法是基于方法grow()的,ArrayList的几个构造参数,决定了在初始状态下,容器的大小要么为0要么为自己设定的某个值。那么具体的扩容,就是在add()等方法进行的时候进行一次判定——如果有数组溢出的风险,那么就进行扩容。

        扩容的时候先判定数组大小。数组是空或者小于10,那么在扩容的时候将数组直接分配大小到10。这也是一部分人认为ArrayList最小容量是10的原因。之后每次扩容,是变成原数组长度的1.5倍。但是有一个最大值——2^{31}-9,如果大于这个数会看当前数组大小到底是多少,如果小于该值,那么直接扩容到2^{31}-9,反之,则扩容到最大值2^{31}-1

在调用add()方法的时候触发扩容机制

        先来看一下add()的一个常用的重载方法:

    public boolean add(E e) {
        ensureCapacityInternal(size + 1);
        elementData[size++] &
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值