Java之List系列--ArrayList扩容的原理

原文网址:Java之List系列--ArrayList扩容的原理_IT利刃出鞘的博客-CSDN博客

简介

说明

本文介绍Java的ArrayList是如何进行扩容的。即:扩容的机制。

重要大小

初始大小

加载因子

扩容倍数

底层实现

是否线程安全

同步方式

ArrayList

10

1

1.5倍

Object数组

线程不安全

Vector

10

1

2倍

Object数组

线程安全

synchronized

下边介绍ArrayList的扩容机制。

扩容机制

1. new一个ArrayList对象

直接new 一个ArrayList对象时(未指定初始容量大小)是一个空的数组,容量大小为零。

public ArrayList() {
	// DEFAULTCAPACITY_EMPTY_ELEMENTDATA 变量为一个空的数组 
	// private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
	this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

2. 调用add()方法

当第一次调用ArrayList对象的add方法时,分配容量大小

public boolean add(E e) {
	// size为ArrayList的实际数量大小而非容量大小,若未指定容量构建ArrayList对象,size为0
	ensureCapacityInternal(size + 1);  // Increments modCount!!
	elementData[size++] = e;
	return true;
}
private void ensureCapacityInternal(int minCapacity) {
	// 如果为空数组,最小需要容量为默认容量DEFAULT_CAPACITY 也就是10 
	// private static final int DEFAULT_CAPACITY = 10;
	if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
		minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
	}
	// 调用扩容方法
	ensureExplicitCapacity(minCapacity);
}

private void ensureExplicitCapacity(int minCapacity) {
	//protected transient int modCount = 0;
	modCount++;
	// 如果需要的最小容量大于此时的容量,调用真正的扩容方法
	// overflow-conscious code
	if (minCapacity - elementData.length > 0)
		grow(minCapacity);
}

3. 扩容

上边是文章的部分内容,为便于维护,全文已迁移到此网址:Java-ArrayList扩容的原理 - 自学精灵

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT利刃出鞘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值