今日份源码——ArrayList

ArrayList原理解读

ArrayList基本数据结构

今日份源码——ArrayList_第1张图片

源码基本结构

今日份源码——ArrayList_第2张图片

我们看到,有好多个空数组,可见,ArrayList中是用数组来存储数据的。那这些数组是怎么用的呢?继续看

几个典型的方法分析

1、判断包含某个值,可是逐个按下标遍历数组数据

今日份源码——ArrayList_第3张图片

遍历elementData数组,逐个取值进行匹配判断

indexOf(o) 返回的是o元素第一次出现的index——数组下标

2、从后往前遍历,查找o最后出现的位置index,下标从大到小遍历数组

今日份源码——ArrayList_第4张图片

4、含有一个clone方法,实则是将elementData数组数据拷贝

今日份源码——ArrayList_第5张图片

测试方法

今日份源码——ArrayList_第6张图片

5、可以直接转成一个数组

今日份源码——ArrayList_第7张图片
注意长度

使用方法

今日份源码——ArrayList_第8张图片
今日份源码——ArrayList_第9张图片

6、获取数据

今日份源码——ArrayList_第10张图片

检查下标大小

今日份源码——ArrayList_第11张图片
直接读取下标数据,非常迅速

直接由数组下标读取值时间复杂度O(1)

7、添加数据

今日份源码——ArrayList_第12张图片
size是实际存储的数据的个数(有别于数组容量)
今日份源码——ArrayList_第13张图片
扩容、迁移判断
今日份源码——ArrayList_第14张图片
grow方法牵扯数组扩容、数据迁移

扩容是原容量的1.5倍扩容(在使用ArrayList时,如果大致知道数值个数,初始化时给出容量是最好的)

判断是否需要扩容、迁移

添加新数据到数组

基础分析到此

你可能感兴趣的:(今日份源码——ArrayList)