首页 > 编程语言 >JAVA---ArrayList的add底层源码分析

JAVA---ArrayList的add底层源码分析

时间:2022-10-22 18:46:43浏览次数:52  
标签:扩容 JAVA mincapacity ArrayList 源码 数组 赋值

1.ArrayList

 

 

 无参构造器使用ArrayList源码

1.首先创建了一个空的elementData数组

2.add()方法添加第一个元素,如果是值类型来说,往ArrayList里面添加和修改元素,都会引起装箱和拆箱 的操作

(1)调用ensureCapacityInternal(size+1)方法,确认你这个容器是否能往里加入一个元素(即确定是否扩容)

调用后首先判断你这个数组是否是个空数组,如果是,【就给mincapacity赋值1然后和10比较,取最大值赋给mincapacity;】

然后调用ensureCapacity()方法:现用modCount++;记录集合修改次数,防止多线程操作出现异常;然后进行mincapacity和原数组长度进行比较,

如果mincapacity大就说明我实际需要的最小容量为mincapacity而你不够了,然后调用grop()方法去真扩容。把原数组的容量扩大1.5倍赋值给一个变量

【(由于此时为第一次原数组length为0,扩容1.5仍然为0,扩容后依旧比需求小,就直接把所需容量mincapacity赋值给这个变量,

【相当于第一次默认扩容为10】,ps:扩容后就可以把元素通过索引加进去了)】

然后通过Arrays.copyOf对原数组进行扩容并赋值给原数组---//原数组=Arrays.copyOf(原数组,这个变量)//----

第二次扩容就按原数组1.5倍扩容。

(2)执行赋值操作

把元素放入集合里面

标签:扩容,JAVA,mincapacity,ArrayList,源码,数组,赋值
From: https://www.cnblogs.com/wang1999an/p/16816943.html

相关文章

  • java基础HashSet 集合TreeSet集合
           ......
  • Java中的JDK和JRE
    三个概念:JDK:javadevelopmentkit(java开发工具)JRE:javaruntimeenvironment(java运行时环境)JVM:javaVirtualMachine(java虚拟机)1.JDK:JDK就是我们开发人员使用的开发工具,......
  • 一、源码编译安装 postgresq 14 版本
    1、安装所需的依赖包使用操作系统用户pg14进行编译安装,软件安装目录为/home/pg14/soft,编译安装时需要开启ssl的支持[root@cdh01~]#yumgrouplistLoadedplugins:pro......
  • java基础-->变量
    字面量计算机是用来处理数据的,字面量就是告诉程序员:数据在程序中的书写格式。常用数据生活中的写法程序中的写法说明整数666,-88666,-88写法一致小数13.......
  • Java限流及常用解决方案
    前言随着微服务的流行,服务和服务之间的依赖越来越强,调用关系越来越复杂,服务和服务之间的稳定性越来越重要。在遇到突发的请求量激增,恶意的用户访问,亦或请求频率过高给下游......
  • 选择排序与冒泡排序(c语言+Java语言)
    选择排序O(n2)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素......
  • java 复杂对象数组练习 添加和遍历
       Javabeanpackagetest_4;publicclassStudent{privateintid;privateStringname;privateintage;publicStudent(){}publicStu......
  • copyOfRange方法--源码分析
    首先看看Arrays.copyOfRange泛型方法:publicstatic<T>T[]copyOfRange(T[]original,intfrom,intto){returncopyOfRange(original,from,to,(Class<?ext......
  • java第四讲-继承与多态-InheritsAndPolymorphismSourceCode
    1.继承条件下类的访问权限public:外界可自由访问;private:外界不可访问;protected:同一包中的子类都可以访问,另一包中的子类(派生于同一个父类)也可以访问;default:如果......
  • java---泛型(Generics)
    泛型是JDK1.5以后增加的,它可以帮助我们建立类型安全的集合。什么是泛型泛型的本质就是“数据类型的参数化”,处理的数据类型不是固定的,而是可以作为参数传入,可以把“泛......