美文网首页javaalreadyJava之家
ArrayList底层数据结构介绍

ArrayList底层数据结构介绍

作者: 小小土豆dev | 来源:发表于2022-05-22 23:09 被阅读0次

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倍,数组大小 = 数组当前元素个数+新增元素个数。


相关文章

网友评论

    本文标题:ArrayList底层数据结构介绍

    本文链接:https://www.haomeiwen.com/subject/fsgfprtx.html