【Java基础】Java8集合[ArrayList 之 属性](底层原理+源码分析)
CSDN话题挑战赛第2期 参赛话题:学习笔记
Java8集合:ArrayList
前言
Java集合类可以用于存储多个对象
,还可以保存具有映射关系(Key-Value)的关联数组
。
可以说Java集合就像是一个容器,可以动态地把多个对象引入到容器当中。
而在这篇文章中,我们将讲解集合中ArrayList
实现类的属性
:
集合主要分为Collection接口
与 Map接口
两类,而ArrayList
就是Collection
接口的子接口:List
接口的一个实现类…
一、ArrayList概述
我们可以看一下,ArrayList实现类源码
中的第一段注释:
Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is used internally to store the list. (This class is roughly equivalent to Vector, except that it is unsynchronized.)
注释大义
:
ArrayList
是一个动态的数组,实现了所有的可选操作(也就是实现了List接口以及相关的所有方法),它允许所有元素插入,其中包括null。
除了实现了List
接口,该类还提供了一些方法用于操作内部存储数组的大小。(这个类大致相当于Vector
,不同的是ArrayList
线程不同步,而Vector
是线程同步的)
源码已经告诉我们,ArrayList集合的底层,就是动态的数组,可以存储包括null在内的所有元素…
二、ArrayList属性
1.序列号 serialVersionUID
serialVersionUID
代表序列版本号,用来表明类的不同版本间的兼容性
。
属性源码
:
private static final long serialVersionUID = 8683452581122892189L;
2.默认容量 DEFAULT_CAPACITY
ArrayList集合的默认容量为10…
属性源码
:
/**
* Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;
3.空数组常量 EMPTY_ELEMENTDATA
属性源码
:
/**
* Shared empty array instance used for empty instances.
*/
private static final Object[] EMPTY_ELEMENTDATA = {};
4.默认空数组常量
用于默认大小的空实例。将默认空数组常量DEFAULTCAPACITY_EMPTY_ELEMENTDATA
与空数组常量EMPTY_ELEMENTDATA
区分开来,我们就可以知道数组是在扩容到什么时候,第一个元素被添加进来的。
空数组列表elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
属性源码
:
/**
* Shared empty array instance used for default sized empty instances. We
* distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when
* first element is added.
*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
5.存储数组 elementData
通过对下列源码的理解,我们可以知道的是:ArrayList集合的底层实现,使用的是一个Object类型的数组…
这个属性应该是ArrayList实现类中最重要的属性了,该实现类的方法,基本是建立在存储数据的elementData
数组上的。
属性源码
:
/**
* The array buffer into which the elements of the ArrayList are stored.
* The capacity of the ArrayList is the length of this array buffer. Any
* empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
* will be expanded to DEFAULT_CAPACITY when the first element is added.
*/
transient Object[] elementData; // non-private to simplify nested class access
6.数组长度 size
属性源码
:
/**
* The size of the ArrayList (the number of elements it contains).
*
* @serial
*/
private int size;
7.容量上限 MAX_ARRAY_SIZE
MAX_ARRAY_SIZE代表的是数组的最大上限,数组的长度必须<=MAX_ARRAY_SIZE
属性源码
:
/**
* The maximum size of array to allocate.
* Some VMs reserve some header words in an array.
* Attempts to allocate larger arrays may result in
* OutOfMemoryError: Requested array size exceeds VM limit
*/
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
集合ArrayList的属性就讲解道这里啦,下一篇文章来讲解集合ArrayList的方法…
相关文章
- java局域网发送文件_Java如何实现局域网文件传输代码案例分享
- java用什么软件_Java编程什么软件最好用?
- Java删除文件(delete file in java)[通俗易懂]
- java启动器_JAVA基础:Java 启动器如何查找类
- Java商城源码最好用的java商城电商系统之一
- java课程设计成绩管理系统_Java课程设计–学生成绩管理系统
- java extends runtimeexception_Java中RuntimeException和Exception的区别
- ringbuffer java例子_Java RingBuffer.publish方法代碼示例「建议收藏」
- jar中没有主清单属性啥意思啊_java没有主清单属性
- Java-String类的作用和常用方法总结
- java webservice接口开发教程_JAVA入门教程
- Java项目:UMS 用户管理系统
- Java实例属性比较引发的一些思考
- 【开发环境】Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 ( 输出 GB2312 格式处理中文乱码 | rn换行 | Runtime 执行 Cmd 命令 )
- Java学习笔记之九java二维数组及其多维数组的内存应用拓展延伸详解编程语言
- Java学习笔记之五java数组详解编程语言
- Java实现Redis分布式锁(java实现redis锁)
- 连接高效完成Java面试:掌握Oracle连接知识(java面试oracle)
- 清除Java实现Redis缓存数据自动过期清除(redisjava过期)
- 机制【Redis Java过期机制:保护缓存的预期功能】(redisjava过期)
- 我为什么使用 Java
- Java和MySQL的数据导出方法(javamysql导出)
- Learn How to Connect Your Java Application with MongoDB in Just a Few Steps(java连接mongodb)
- 简明易懂的介绍Linux java包的25个字的文章标题:Linux Java包:开发和运行Java程序的工具(Linuxjava包)
- Java工程师集MySQL技能于一身(java工程师mysql)
- Java程序员的MySQL数据库之旅(java操作mysql数据库)
- 询Java与Oracle联合查询更高效的数据处理方式(java oracle查)