青山灼灼,星光杳杳,秋雨淅淅,晚风|

手提麻袋

园龄:3年2个月粉丝:1关注:1

ArrayList 篇章

ArrayLis 是一个数组列表,它的底层实现的 Object 数组 , 有时候我们会用 ArrayList 来存储一些基本数据结构,比如 int, float,double... ,其实这些都是存储的他们的一个包装类。

ArrList 与 Java的数组的区别

  1. ArrList 支持动态的扩容,而数组的长度是固定的 。
  2. ArrList 能够存储对象,支持不同类型的数据 ,数组的存储类型是固定的。

属性定义

private static final int DEFAULT_CAPACITY = 10;
private static final Object[] EMPTY_ELEMENTDATA = {};
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
transient Object[] elementData
private int size;

有参构造

//传递一个初始化的值 initialCapacity
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
//如果initialCapacity 大于0 的话就创建个 Object 对象 的数组 长度为 initialCapacity
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
//如过等于0的话 ,那么就将 EMPTY_ELEMENTDATA 这个空对象赋给当前对象的 elementData
this.elementData = EMPTY_ELEMENTDATA;
} else {
//如果都不是的话就抛出一个异常
throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);
}
}

无参构造

public ArrayList() {
//赋值一个空对象给 elementData
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

这边可以得出ArryaList 初始化,要么是给他赋值,要么默认为空.

add方法

public boolean add(E e) {
// e 为我们添加的对象 ensureCapacityInternal 的 size + 1 等于 1 传递下去
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
进入 ensureCapacityInternal 方法
//就收到参数 1
private void ensureCapacityInternal(int minCapacity) {
//传递参数 calculateCapacity
ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}

进入到 calculateCapacity(elementData, minCapacity)

private static int calculateCapacity(Object[] elementData, int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
return Math.max(DEFAULT_CAPACITY, minCapacity);
}
return minCapacity;
}
posted @   手提麻袋  阅读(26)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起