加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java集合之ArrayList源码分析

发布时间:2020-12-14 06:40:26 所属栏目:Java 来源:网络整理
导读:概述 ArrayList可以理解为动态数组,根据MSDN的说法,就是Array的复杂版本. 与数组相比,它的容量能动态增长. ArrayList是List接口的可变数组的实现. 实现了所有可选列表操作,允许包括null在内的所有元素. 数组的特点,查询快增删慢. 每个ArrayList实例都有一个

概述

ArrayList可以理解为动态数组,根据MSDN的说法,就是Array的复杂版本. 与数组相比,它的容量能动态增长. ArrayList是List接口的可变数组的实现. 实现了所有可选列表操作,允许包括null在内的所有元素.

数组的特点,查询快增删慢.

每个ArrayList实例都有一个容量,该容量是指向用来存储列表元素的数组大小. 随着向ArrayList中不断添加元素,其容量也自动增长,自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量. 在添加大量元素前,应用程序也可以使用 ensureCapacity 方法来增加ArrayList实例的容量,可以减少递增式再分配的数量.

注意:ArrayList不是线程安全的.

ArrayList原理

ArrayList实现了List接口、底层使用数组保存所有元素,其操作基本上是对数组的操作.

Java集合之ArrayList

ArrayList继承了AbstractList,实现了List. 它是一个数组,提供了相关的添加、删除、修改、遍历等.

ArrayList实现了RandmoAccess接口,即提供了随机访问功能. RandmoAccess是java中用来被List实现的,为List提供快速访问功能的. 在ArrayList中,可以通过元素的序号快速获取元素对象,这就是快速随机访问.

ArrayList实现了Cloneable接口,即覆盖了函数clone(),能被克隆.

ArrayList实现java.io.Serizlizable接口,这意味着ArrayList支持序列化,能通过序列化去传输.

1.ArrayLIst底层用数组实现

Java集合之ArrayList

其他字段:

Java集合之ArrayList

2.构造函数

Java集合之ArrayList

Java集合之ArrayList

Java集合之ArrayList

3.存储

ArrayList提供了多种添加元素的方法.

(1)add(E e)方法,将指定元素添加到列表的尾部. 当容量不足时,调用 grow 增长容量.

Java集合之ArrayList

可以看到,方法核心内容就是 ensureCapacityInternal 方法. 用于调整数组容量,这个函数就是 自动扩容机制的核心. 其实现如下:

Java集合之ArrayList

Java集合之ArrayList

也就是说,当增加数据时,若ArrayList大小不够了,那么将数组扩容为原来的1.5倍.

(2)add(int,E)在指定位置插入元素

Java集合之ArrayList

(3)set(int,E)将指定位置的元素替换,返回旧的元素的值

Java集合之ArrayList

(4)addAll(Collection)将指定Collection中的元素添加到末尾

Java集合之ArrayList

(5)addAll(int,Collection)将指定Collection中的元素添加到指定位置

Java集合之ArrayList

方法基本都大同小异,重要的就是为数组扩容

4.读取

读取的方法就比较简单了,ArrayList 能够支持随机访问的原因也是很显然的,因为它内部的数据结构是数组,而数组本身就是支持随机访问

Java集合之ArrayList

5.删除

(1)remove(int)删除指定下标的元素并返回

Java集合之ArrayList

(2)remove(Object)删除指定的元素,返回是否成功(布尔值)

Java集合之ArrayList

Java集合之ArrayList

删除数组中的元素,会将元素后面的所有元素向左移动一个位置.

6.调整数组容量

ensureCapacity 方法用于调整数组的容量

Java集合之ArrayList

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读