ArrayList 源码分析
1. ArrayList 概述
ArrayList的底层采用的是object类型数组形式,用来进行object类型数据的存储,作为一个数组队列,它继承于
AbstractList,提供了增删改查的功能。
ArrayList具有通过grow方法来进行扩容操作的特性,通常扩容比大约是原数组的的1.5倍,数组容量在创建伊
始它的容量便是固定的,无法增加或者减少。所以扩容的过程并非直接增加原数组的容量,而是首先创建一
个大约是原数组容量1.5倍的新数组,然后再把原数组中的数据复制到新数组中,之后,原数组会被自动回收,
这个过程非常的浪费时间。
ArrayList特征是一个重要的知识点,它拥有增删慢且查询快的特点:
增加慢:
1, 有可能触发扩容操作。在扩容方法操作中,从原数组拷贝数据到新数组浪费时间,同时在扩容操作会出
现无效内存销毁问题,上文中已经做出解释,同样浪费时间。
2. 插入数据到指定下标位置,从插入位置开始,数组中的其他数据会整体向后移动。移动操作浪费时间。
删除慢:
1. 删除指定下标元素,数组中的元素整体向前移动。
2. 删除元素较多情况下,会导致空间冗余。空间效率较低
查询快:
ArrayList的底层数据操作方式和数组操作方式相同,直接通过数组名和下标来获取对应元素的操作方式效率
很高,是对特定地址的直接访问操作,通俗来说就是直中要害,一针见血!!!
附:数组内存地址分析图