type
status
date
slug
summary
tags
category
icon
password
😀
这里写文章的前言: 一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。

📝 ArrayList源码分析

ArrayList 是代码中使用非常频繁的,所以看底层的代码时非常有必须的.

数据结构和参数

DEFAULT_CAPACITY : 默认集合大小;默认值是10
EMPTY_ELEMENTDATA : 空的Object数组,用于后续的初始化和赋值
DEFAULTCAPACTITY_EMPTY_ELEMENTDATA: 默认空的Object数组,也是用于后续的判断和赋值
elementData: 存放ArrayList数据的数组
size: 记录ArrayList中元素的个数;size不一定是elementData的长度
 
ArrayList 是一个由 Object [] 的数组来实现的;transient Object[] elementData ,这个变量就是存放数据的
长度是用 size 这个变量来记录的,而不是直接调用的数组的长度
如果ArrayList list = new ArrayList(); 只是仅仅new一个集合的话,数组的大小是没有初始化为10的,而是在add()中,进行判断。 如果数组的是为空的数组的话,就会使用 DEFAULT_CAPACITY 来进行初始化。也就是要调用add方法才行

方法

add方法

add 里面是走了三个方法, size 没有赋值的情况下,就是0
 
所以add方法的总体流程如下
notion image
 

add根据index添加

在上述的add逻辑之前,进行index是否符合规则的校验
 
根据下标添加元素的逻辑流程图
notion image

set方法

根据下标来对久的值进行一种替换,取出对应下标的值,然后下标对应的位置赋值给新值,最后返回旧值回去即可
 
set方法逻辑
notion image

remove方法

根据传入进来的值进行删除

remove根据下标删除

可以看到根据下标删除的话,会先判断传入进来的下标是否满足条件,就是没有出现越界的情况
然后取出旧值,接下来的代码就是非常的熟悉了,就是fastRemove() 里面的代码了
 
根据下标移除元素逻辑
notion image
 

🤗 总结归纳

大致就是看 ArrayList 是如何添加数据的,对数据是怎么保存的,是如何删除数据的,是怎么样进行扩容的,大致弄明白这些就是对ArrayList有一个大致的了解

📎 参考文章

 
💡
有关文章的问题,欢迎您在底部评论区留言,一起交流~