Java学习 -- 简单分析ArrayList实例化的过程
Posted 庸人冲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习 -- 简单分析ArrayList实例化的过程相关的知识,希望对你有一定的参考价值。
ArrayList作为List接口的实现类,是Java为我们提供的一个容器,它对应着数据结构中的顺寻表结构,并且提供了一组针对于表中元素的增删改查操作。这里主要是简单分析一下ArrayList实例化的过程,以及它的扩容机制,这可以有助于我们更加深刻的理解顺序表结构,以及更好的使用ArrayList。如果有不正确地方,还请大佬们可以指出。
实例化
ArrayList
中提供了3种重载的构造器:
- ArrayList()
ArrayList<Integer> list = new ArrayList<>();
-
ArrayList(int initialCapacity)
指定初始化容量
List<Integer> list = new ArrayList<>(255);
- ArrayList(Collection<? extends E> c)
将Collection
的实现类作为参数实例化ArrayList
对象,该构造器会将参数对象中存储的元素拷贝到实例化的ArrayList
对象中。
Collection<Integer> collection = new ArrayList<>(1);
List<Integer> list = new ArrayList<>(collection); // 参数的泛型必须是实例化对象指定的泛型或其子类
自动扩容
ArrayList()
添加元素使用add()
方法,该方法提供了几种重载形式,此处主要介绍add(E e)
方法,以及在添加过程中的扩容机制。
总结
- ArrayList在实例化时,如果使用
空参构造器
、指定初始化容量为0
或者指定的集合为空集合(数组长度为0)
,则在初始化时默认指向了一个共享的空数组,长度为0。这是JDK8.0之后的改变,目的是节省资源。 - 当第一次添加元素时,才会在底层为该对象创建数组。如果使用空参构造器实例化list,则数组默认容量为10。
- 如果是其它另外两种情况,则数组默认容量为1。(size + 1)
- 当需要扩容时,会对数组进行1.5倍的扩容。
建议:在开发中使用带参构造器:ArrayList(int capacity);
,目的是为了防止数组频繁扩容,提高效率。
以上是关于Java学习 -- 简单分析ArrayList实例化的过程的主要内容,如果未能解决你的问题,请参考以下文章