ArrayList 篇章
ArrayLis 是一个数组列表,它的底层实现的 Object 数组 , 有时候我们会用 ArrayList 来存储一些基本数据结构,比如 int, float,double... ,其实这些都是存储的他们的一个包装类。
ArrList 与 Java的数组的区别
- ArrList 支持动态的扩容,而数组的长度是固定的 。
- 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;
}
喜欢请赞赏一下啦^_^

浙公网安备 33010602011771号