今日份源码——ArrayList
2019-01-27 本文已影响435人
大黑跟小白的日常
ArrayList原理解读
ArrayList基本数据结构

源码基本结构

我们看到,有好多个空数组,可见,ArrayList中是用数组来存储数据的。那这些数组是怎么用的呢?继续看
几个典型的方法分析
1、判断包含某个值,可是逐个按下标遍历数组数据


遍历elementData数组,逐个取值进行匹配判断
indexOf(o) 返回的是o元素第一次出现的index——数组下标
2、从后往前遍历,查找o最后出现的位置index,下标从大到小遍历数组

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

测试方法

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


使用方法


6、获取数据

检查下标大小

直接由数组下标读取值时间复杂度O(1)
7、添加数据



扩容是原容量的1.5倍扩容(在使用ArrayList时,如果大致知道数值个数,初始化时给出容量是最好的)
判断是否需要扩容、迁移
添加新数据到数组
基础分析到此