mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
update ArrayList.md
This commit is contained in:
parent
d3edd36a34
commit
cc425cda63
@ -68,23 +68,25 @@ public class ArrayList<E> extends AbstractList<E>
|
|||||||
private int size;
|
private int size;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 带初始容量参数的构造函数。(用户自己指定容量)
|
* 带初始容量参数的构造函数(用户可以在创建ArrayList对象时自己指定集合的初始大小)
|
||||||
*/
|
*/
|
||||||
public ArrayList(int initialCapacity) {
|
public ArrayList(int initialCapacity) {
|
||||||
if (initialCapacity > 0) {
|
if (initialCapacity > 0) {
|
||||||
//创建initialCapacity大小的数组
|
//如果传入的参数大于0,创建initialCapacity大小的数组
|
||||||
this.elementData = new Object[initialCapacity];
|
this.elementData = new Object[initialCapacity];
|
||||||
} else if (initialCapacity == 0) {
|
} else if (initialCapacity == 0) {
|
||||||
//创建空数组
|
//如果传入的参数等于0,创建空数组
|
||||||
this.elementData = EMPTY_ELEMENTDATA;
|
this.elementData = EMPTY_ELEMENTDATA;
|
||||||
} else {
|
} else {
|
||||||
|
//其他情况,抛出异常
|
||||||
throw new IllegalArgumentException("Illegal Capacity: "+
|
throw new IllegalArgumentException("Illegal Capacity: "+
|
||||||
initialCapacity);
|
initialCapacity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*默认构造函数,DEFAULTCAPACITY_EMPTY_ELEMENTDATA 为0.初始化为10,也就是说初始其实是空数组 当添加第一个元素的时候数组容量才变成10
|
*默认无参构造函数
|
||||||
|
*DEFAULTCAPACITY_EMPTY_ELEMENTDATA 为0.初始化为10,也就是说初始其实是空数组 当添加第一个元素的时候数组容量才变成10
|
||||||
*/
|
*/
|
||||||
public ArrayList() {
|
public ArrayList() {
|
||||||
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
|
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
|
||||||
@ -94,16 +96,16 @@ public class ArrayList<E> extends AbstractList<E>
|
|||||||
* 构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
|
* 构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
|
||||||
*/
|
*/
|
||||||
public ArrayList(Collection<? extends E> c) {
|
public ArrayList(Collection<? extends E> c) {
|
||||||
//
|
//将指定集合转换为数组
|
||||||
elementData = c.toArray();
|
elementData = c.toArray();
|
||||||
//如果指定集合元素个数不为0
|
//如果elementData数组的长度不为0
|
||||||
if ((size = elementData.length) != 0) {
|
if ((size = elementData.length) != 0) {
|
||||||
// c.toArray 可能返回的不是Object类型的数组所以加上下面的语句用于判断,
|
// 如果elementData不是Object类型数据(c.toArray可能返回的不是Object类型的数组所以加上下面的语句用于判断)
|
||||||
//这里用到了反射里面的getClass()方法
|
|
||||||
if (elementData.getClass() != Object[].class)
|
if (elementData.getClass() != Object[].class)
|
||||||
|
//将原来不是Object类型的elementData数组的内容,赋值给新的Object类型的elementData数组
|
||||||
elementData = Arrays.copyOf(elementData, size, Object[].class);
|
elementData = Arrays.copyOf(elementData, size, Object[].class);
|
||||||
} else {
|
} else {
|
||||||
// 用空数组代替
|
// 其他情况,用空数组代替
|
||||||
this.elementData = EMPTY_ELEMENTDATA;
|
this.elementData = EMPTY_ELEMENTDATA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -127,13 +129,14 @@ public class ArrayList<E> extends AbstractList<E>
|
|||||||
* @param minCapacity 所需的最小容量
|
* @param minCapacity 所需的最小容量
|
||||||
*/
|
*/
|
||||||
public void ensureCapacity(int minCapacity) {
|
public void ensureCapacity(int minCapacity) {
|
||||||
|
//如果是true,minExpand的值为0,如果是false,minExpand的值为10
|
||||||
int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
|
int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
|
||||||
// any size if not default element table
|
// any size if not default element table
|
||||||
? 0
|
? 0
|
||||||
// larger than default for default empty table. It's already
|
// larger than default for default empty table. It's already
|
||||||
// supposed to be at default size.
|
// supposed to be at default size.
|
||||||
: DEFAULT_CAPACITY;
|
: DEFAULT_CAPACITY;
|
||||||
|
//如果最小容量大于已有的最大容量
|
||||||
if (minCapacity > minExpand) {
|
if (minCapacity > minExpand) {
|
||||||
ensureExplicitCapacity(minCapacity);
|
ensureExplicitCapacity(minCapacity);
|
||||||
}
|
}
|
||||||
@ -141,7 +144,7 @@ public class ArrayList<E> extends AbstractList<E>
|
|||||||
//得到最小扩容量
|
//得到最小扩容量
|
||||||
private void ensureCapacityInternal(int minCapacity) {
|
private void ensureCapacityInternal(int minCapacity) {
|
||||||
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
|
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
|
||||||
// 获取默认的容量和传入参数的较大值
|
// 获取“默认的容量”和“传入参数”两者之间的最大值
|
||||||
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
|
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user