前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java基础】Java8集合[ArrayList 之 属性](底层原理+源码分析)

【Java基础】Java8集合[ArrayList 之 属性](底层原理+源码分析)

作者头像
.29.
发布2022-11-15 13:18:12
2840
发布2022-11-15 13:18:12
举报
文章被收录于专栏:个人技术博客

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代表序列版本号,用来表明类的不同版本间的兼容性

属性源码

代码语言:javascript
复制
private static final long serialVersionUID = 8683452581122892189L;


2.默认容量 DEFAULT_CAPACITY

ArrayList集合的默认容量为10…

属性源码

代码语言:javascript
复制
    /**
     * Default initial capacity.
     */
    private static final int DEFAULT_CAPACITY = 10;


3.空数组常量 EMPTY_ELEMENTDATA

属性源码

代码语言:javascript
复制
 /**
     * Shared empty array instance used for empty instances.
     */
    private static final Object[] EMPTY_ELEMENTDATA = {};


4.默认空数组常量

用于默认大小的空实例。将默认空数组常量DEFAULTCAPACITY_EMPTY_ELEMENTDATA与空数组常量EMPTY_ELEMENTDATA区分开来,我们就可以知道数组是在扩容到什么时候,第一个元素被添加进来的。

空数组列表elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA

属性源码

代码语言:javascript
复制
/**
     * 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数组上的。

属性源码

代码语言:javascript
复制
 /**
     * 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

属性源码

代码语言:javascript
复制
  /**
     * 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

属性源码

代码语言:javascript
复制
    /**
     * 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的方法…

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java8集合:ArrayList
  • 前言
  • 一、ArrayList概述
  • 二、ArrayList属性
    • 1.序列号 serialVersionUID
      • 2.默认容量 DEFAULT_CAPACITY
        • 3.空数组常量 EMPTY_ELEMENTDATA
          • 4.默认空数组常量
            • 5.存储数组 elementData
              • 6.数组长度 size
                • 7.容量上限 MAX_ARRAY_SIZE
                相关产品与服务
                对象存储
                对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档