前言:
之前写了关于Mybatis、Spring、Tomcat的源码解析,现在准备开始写一下JDK的源码解析系列文章。
网络上已经有很多大神级的JDK类解析文章,相比而言,无论是深度还是文笔都让笔者自惭形秽。
但是为了让自己对JDK源码的印象更加深刻,所以还是准备献丑了。
从自己的角度来描述一下对JDK相关类的理解,欢迎指正
从网络上截一个图(如有侵权,请联系作者),简单表示下数组结构
网格下面的0、1、2...表示index,也就是索引
网格中的数据表示当前索引的值
1.ArrayList结构、参数分析
public class ArrayList extends AbstractList
implements List, RandomAccess, Cloneable, java.io.Serializable
{
// 默认大小,为10
private static final int DEFAULT_CAPACITY = 10;
// 数据放置在elementData,这个数组中
transient Object[] elementData; // non-private to simplify nested class access
// 数组大小
private int size;
可以看出,ArrayList默认使用数组来存放数据
2.构造方法
// 空参构造
public ArrayList() {
// private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
// 给定初始容量
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
// 给定初始集合
public ArrayList(Collection c) {
...
}
// 4.删除某个区间的元素
protected void removeRange(int fromIndex, int toIndex) {
...
}
// 5.按照条件删除
@Override
public boolean removeIf(Predicate
关注
打赏