博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArrayList源码分析
阅读量:6956 次
发布时间:2019-06-27

本文共 1326 字,大约阅读时间需要 4 分钟。

hot3.png

一、先看下ArrayList的构造方法源码

public ArrayList(int initialCapacity) {    super();    if (initialCapacity < 0)         throw new IllegalArgumentException("Illegal Capacity: "+                                               initialCapacity);    this.elementData = new Object[initialCapacity];}public ArrayList() {    this(10);}
由上面的源码可知,当我们新建一个ArrayList对象的时候:

1、如果我们不指定ArrayList的长度,会默认分配长度为10。

2、ArrayList的底层是一个对象数组。

二、添加元素源码

public boolean add(E e) {       ensureCapacityInternal(size + 1);  // Increments modCount!!       elementData[size++] = e;       return true;}private void ensureCapacityInternal(int minCapacity) {        modCount++;        // overflow-conscious code        if (minCapacity - elementData.length > 0)            grow(minCapacity);}private void grow(int minCapacity) {        // overflow-conscious code        int oldCapacity = elementData.length;        int newCapacity = oldCapacity + (oldCapacity >> 1);        if (newCapacity - minCapacity < 0)            newCapacity = minCapacity;        if (newCapacity - MAX_ARRAY_SIZE > 0)            newCapacity = hugeCapacity(minCapacity);        // minCapacity is usually close to size, so this is a win:        elementData = Arrays.copyOf(elementData, newCapacity);}
由添加元素源码可知:

1、首先判断容量是否已经满了,如果满了就会扩容,否则的话就将元素放到对象数组里。

转载于:https://my.oschina.net/weiweiblog/blog/612977

你可能感兴趣的文章
给定一个串,去掉连续的重复字母,
查看>>
ExtJS(MVC)+PHP(ThinkPHP)+MySql5.0 开发框架准备阶段
查看>>
dd命令
查看>>
cobbler 安装部署
查看>>
0.11.1版本docker安装与使用
查看>>
我的友情链接
查看>>
小学四则运算
查看>>
jenkins+docker的简单项目部署
查看>>
Spring工具类:WebApplicationContextUtils
查看>>
MSR2010配置小记
查看>>
(20120722)(笔记004)android开发应用程序资源
查看>>
Jquery extend的用法
查看>>
URL参数解析为一个对象
查看>>
【吾日三省吾身】2015.6.25-涅槃行动第三十八天
查看>>
python脚本输出不换行或者输出换行
查看>>
虚拟网卡实现虚拟机与本机互访
查看>>
我的友情链接
查看>>
Spark-GraphxAPI学习笔记
查看>>
异次元软件
查看>>
Android 冷启动时间优化
查看>>