400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

四、ArrayList底层源码详解-创新互联

文章目录
菜鸟教程ArrayList讲解

成都创新互联于2013年创立,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元江津做网站,已为上家服务,为江津各地企业和个人服务,联系电话:18980820575特点底层源码分析 创建 无参构造器

ArrayList list = new ArrayList();底层的实现方式
在这里插入图片描述

有参构造器

ArrayList list = new ArrayList(8);底层实现
在这里插入图片描述

传入集合的有参构造器

在这里插入图片描述

也就说明,无参构造器,一开始得到的集合是空的

扩容

list.add(new Book(“红楼梦”,30,“曹雪芹”));底层的实现

  1. 首先走到这里在这里插入图片描述

    • E e:表示添加数据时传进来的数据
    • ensureCapacityInternal(size + 1):判断是否需要扩容(无参构造器一开始未初始化size,java中默认为0)
    • elementData[size++] = e:add是在最后添加数据
  2. 然后再进入ensureCapacityInternal(size + 1)判断是否需要扩容在这里插入图片描述

  3. 进入calculateCapacity(Object[] elementData, int minCapacity)确定扩容的容量在这里插入图片描述

    • DEFAULTCAPACITY_EMPTY_ELEMENTDATA:空数组
    • DEFAULT_CAPACITY常量10
    • minCapacity:数组添加完这个数据时的容量
  4. 再进入这个方法,确定添加数据

    • modCount:记录添加次数(防止多线程同时修改)
    • if (minCapacity - elementData.length >0):判断当前内容和数组容量大小,如果数组容量够就没必要扩容
  5. 最后才进行扩容在这里插入图片描述

注意new ArrayList(0)

若有参构造时,传的数据是0,那么,扩容还是会按照0扩容,不会按照无参时考虑是否大于10,来扩容。即扩容后elementData数组容量依次为0、newCapacity=1、newCapacity=2、newCapacity=(2+2/2)=3、newCapacity=(3+3/2)=4,newCapacity=(4+4/2)=6,即第六次添加数据不扩容,第七次添加还用扩容…

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前题目:四、ArrayList底层源码详解-创新互联
分享URL:http://mzwzsj.com/article/cdeego.html

其他资讯

让你的专属顾问为你服务