ArrayList底层数据结构介绍

ArrayList

ArrayList底层是采用数组来进行数据的存储。


ArrayList源码
  • DEFAULT_CAPACITY:ArrayList初始大小是10
  • EMPTY_ELEMENTDATA:ArrayList的初始化数组,用来初始化elementData
  • elementData:ArrayList的底层数组,是一个Object类型数组
  • size:ArrayList大小

初始化大小

1、ArrayList通过无惨构造函数初始化的容量是0。


2、通过有参构造函数初始化的容量是参数的容量大小


ArrayList扩容机制

一:add操作扩容规则

1、空集合第一次add操作会触发首次扩容,扩容大小是10。
2、如果新add的元素超过ArrayList的容量,比如,添加第11个元素,扩容1.5倍(后面每次扩容是上次容量的1.5倍,如果1.5倍存在小数问题怎么解决,实际底层是通过右移一位来实现扩容1.5倍)
扩容是用新数组代替旧数组,指针指向新的数组的地址,旧的数组下次垃圾回收会进行回收。(创建一个新的数组,然后将旧数据copy过来,然后再追加新的元素)

grow是扩容方法


orivate stotic Final Int MAX ARRAY SIZE w Integer. RAX VALUE•.png

二:addAll操作扩容规则

1、一个空的集合第一次添加一个新的集合

  • 如果添加的元素没有超过10,默认扩容是10。
  • 如果超过10,默认是添加的元素的个数。


2、非空集合添加元素

  • 如果添加的元素没有超过1.5倍,则扩容1.5倍。
  • 如果超过了1.5倍,数组大小 = 数组当前元素个数+新增元素个数。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容