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方法的总体流程如下

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

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

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

🤗 总结归纳
大致就是看 ArrayList 是如何添加数据的,对数据是怎么保存的,是如何删除数据的,是怎么样进行扩容的,大致弄明白这些就是对ArrayList有一个大致的了解
📎 参考文章
有关文章的问题,欢迎您在底部评论区留言,一起交流~