Java ArrayList源码阅读笔记(基于JDK17)

Java ArrayList源码阅读笔记(基于JDK17)

虽然不喜欢看源码,但是据说会让人变强啊,看别的大佬的代码也许才知道怎么处理自己的一坨吧,因此冒着秃顶的风险还是来看看吧。。。
第一遍先简单看看吧,搞不清楚的地方也许会在遥远的将来再复习下吧

1、简介

其实在搞不清楚这玩意儿究竟是什么的情况下,已经稀里糊涂地用它写了好多代码了,而且每当找不到数据结构的时候,口袋里一摸就是ArrayList,所以它到底是个啥?

https://www.runoob.com/java/java-arraylist.html

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素

ArrayList 继承了 AbstractList ,并实现了 List 接口

以上便是比较标准的定义,大概就是一个特殊的数组,可以方便地变大变小

2、类图及类定义

在这里插入图片描述
在这里插入图片描述
ArrayList继承自AbstractList类,实现了ListRandomAccessCloneablejava.io.Serializable接口

  • List接口:表明它是一个有序列表支持添加、删除、查找等操作,并且可以通过下标进行访问
  • RandomAccess接口:标记接口,表明实现这个接口的List支持快速随机访问,即直接通过索引下标访问列表的元素
  • Cloneable接口:表明支持拷贝操作,支持深拷贝或浅拷贝操作
  • java.io.Serializable接口:表明支持序列化操作,可以将对象转换为字节流进行持久化存储或网络传输,非常方便

3、扩容机制

这块经常会被提到,并且所谓“动态”指的也就是这个机制,是该数据结构设计的关键

3.1、构造函数

要看ArrayList怎样进行扩容,那么自然绕不开创建类的实例
以下两个常量,其中DEFAULT_CAPACITY 表示创建ArrayList默认的初始容量10,而EMPTY_ELEMENTDATA 表示的是一个空数组,这是一个共享的空对象数组

// 默认的初始容量
private static final int DEFAULT_CAPACITY = 10;
// 共享的空数组实例
private static final Object[] EMPTY_ELEMENTDATA = {
   };

ArrayList中,有3个构造函数:

  • ArrayList()
  • ArrayList(int initialCapacity)
  • ArrayList(Collection<? extends E> c)

ArrayList()是无参构造,默认会创建一个空对象数组,在第一次添加元素时会扩容到容量10

public ArrayList() {
   
    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

ArrayList(int initialCapacity)构造函数需要指定一个初始容量,依据给定的初始容量的大小,创建不同长度的对象数组,或是抛出异常

public ArrayList(int initialCapacity) {
   
	if (initialCapacity > 0) {
      // 初始容量大于0
    	this.elementData = new Object[initialCapacity];
    } else if (initialCapacity == 0) {
   
        // 创建空数组
        this.elementData = EMPTY_ELEMENTDATA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值