ArrayList的add方法详解——让我们好好看看一个元素是如何插入到ArrayList集合当中(源码级别)
先看看源码的add方法都涉及到了那些主要方法
这是add方法
这是确保内部容量方法和判断是否扩容方法
这是扩容方法
一、没有手动设置集合大小
1) 确保内部容量< ensureCapacityInternal(size + 1) >;
2) 判断数组是否为未初始化状态< if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) > ;
3) 如果是则进行初始化,并且选择(默认数组大小10,或者用户设置的大小)中取最大作为数组长度 < minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity); > ;
4) 如果数组已经初始化数组,执行下一步判断是否需要扩容 < ensureExplicitCapacity(minCapacity) > ;
5) 判断数组是否需要扩容< if (minCapacity - elementData.length > 0) grow(minCapacity) >;
6) 如果需要扩容, 就按当前数组大小加上它的一半作为扩容之后的数组长度< int newCapacity = oldCapacity + (oldCapacity >> 1) >, 进行下一步操作;
7) 如果不需要扩容,进行下一步操作;
8) 将元素插入到数组的尾部< elementData[size++] = e >
二、有手动设置集合大小
1)确保内部容量< ensureCapacityInternal(size + 1) >;
2)判断数组是否为未初始化状态< if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) > ;
3)因为已经指定数组大小(也就是说已经初始化数组) 判断之后直接执行下一步 判断不否扩容< ensureExplicitCapacity(minCapacity) > ;
4)判断数组是否需要扩容< if (minCapacity - elementData.length > 0) grow(minCapacity) >;
5)如果需要扩容, 就按当前数组大小加上它的一半作为扩容之后的数组长度< int newCapacity = oldCapacity + (oldCapacity >> 1) >, 进行下一步操作;
6)如果不需要扩容,进行下一步操作;
7)将元素插入到数组的尾部< elementData[size++] = e >
****别急这还有重点****
问: ArrayList(int initialCapacity)会不会初始化数组大小?
答: 会初始化数组大小!但是List的大小没有变,因为list的大小是返回size的。
ArrayList的add方法详解——让我们好好看看一个元素是如何插入到ArrayList集合当中(源码级别)相关推荐
- 详解5种红黑树的场景,从Linux内核谈到Nginx源码,听完醍醐灌顶丨Linux服务器开发丨Linux后端开发
5种红黑树的场景,从Linux内核谈到Nginx源码,听完醍醐灌顶 1. 进程调度CFS的红黑树场景 2. 虚拟内存管理的红黑树场景 3. 共享内存slab的红黑树场景 视频讲解如下,点击观看: [干 ...
- 手写代码详解Android Hook入门demo,android应用案例开发大全第四版源码
2. 实用价值 3. 前置技能 4. hook通用思路 5. 案例实战 6. 效果展示 正文 == 1. hook的定义 hook,钩子.勾住系统的程序逻辑. 在某段SDK源码逻辑执行的过程中,通过代 ...
- Silverlight实用窍门系列:54.详解Silverlight中的矩阵变换MatrixTransform,实现其余各种变换【附带实例源码】...
在Silverlight中的MatrixTransform矩阵变换相对上篇文章所述的变换较复杂一些,但这种变换也更灵活. MatrixTransform的实质:让需要变换的元素上的每一个像素点*矩阵得 ...
- ADI Blackfin DSP处理器-BF533的开发详解58:DSP控制ADXL345三轴加速度传感器的应用(含源码)
硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 MEMS三轴加速度传感器 我做了一个三轴加速度 ...
- ADI Blackfin DSP处理器-BF533的开发详解22:SD卡的设计和实现原理及应用(含源码)
硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 硬件设计原理图 功能介绍 ADSP-EDU-B ...
- split()方法详解
split()方法详解 1.split()主要是用于对一个字符串进行分割成多个字符串数组.标准形式为String [] strings = str.split(""); 2.spl ...
- Spring JdbcTemplate方法详解
2019独角兽企业重金招聘Python工程师标准>>> Spring JdbcTemplate方法详解 标签: springhsqldbjava存储数据库相关sql 2012-07- ...
- java构造和解析json_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- java json解析 代码_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
最新文章
- 刚进来的小伙伴说Nginx只能做负载均衡,还是太年轻了
- 创建一个纯色的背景图
- 7-68 阶乘计算 (15 分)
- [翻译]DirectX 状态( 转)
- 课后作业-阅读任务-阅读笔记4
- Java 时间戳转换成时间
- 第4课 列朋波骨《小学生C++趣味编程》
- 基于JAVA+SpringMVC+Mybatis+MYSQL的甜品店商城
- vue项目实现记住密码功能
- SVG 动画(animate、animateTransform、animateMotion)
- 二极管整流和同步整流区别
- html5 webp,在 CRA 中使用 webp 图片提升加载性能
- promise执行顺序总结
- 董卫凤:不服输的华丽转身(一)
- 实验一 利用Excel表格进行掷硬币模拟实验
- jcr多久更新一次_JCR-2017更新 | 快来看看你的影响影子吧
- 第二十五章 Unity 刚体Rigidbody
- 关卡一: jQuery编程
- 硬件部分第三次培训——LCD1602、串口中断、SPI
- # 2021-01-17 #「File Browser」- 基于网页的文件管理器