ArrayList源码分析 JDK8
2018-03-18 20:34
543 查看
ArrayList基本概念
ArrayList是一个数组实现的列表,容量自动增长,线程不安全。RandomAccess接口,用于标记当前类是可以随机访问的,当一个类标记了RandomAccess接口,那么表明该类使用for循环遍历效率更高,如果没用RandomAccess标记,则使用迭代器遍历效率更高。
Cloneable接口,即覆盖了函数clone(),能被克隆。
Serializable接口,支持序列化,能通过序列化去传输。
ArrayList属性
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { //序列化id private static final long serialVersionUID = 8683452581122892189L; //初始化默认容量 private static final int DEFAULT_CAPACITY = 10; //空对象 private static final Object[] EMPTY_ELEMENTDATA = {}; //默认构造函数初始化空对象 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; //数据对象存放地方 transient Object[] elementData; // non-private to simplify nested class access //列表长度 private int size; //列表最大长度 2147483639 private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; }
ArrayList构造函数
无参构造函数 /*** 初始化elementData为空数组,elementData长度为0,size为0,第一次add时候,扩展elementData为默认长度10
*/
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}int构造函数public ArrayList(int initialCapacity) {
//大于0初始化数组为int参数
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) { //参数为0,初始化空数组
this.elementData = EMPTY_ELEMENTDATA;
} else { //小于0 异常
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}Collection对象的构造函数 public ArrayList(Collection<? extends E> c) {
//collection对象转换成数组,将数组的地址的赋给elementData
//这里执行的简单赋值时浅拷贝
elementData = c.toArray();
//elementData长度赋值给size,并且size如果不等于0
if ((size = elementData.length) != 0) {
//执行Arrays.copy方法,把collection对象的内容copy到elementData中。
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
// size为0,将空数组赋值给elementData
this.elementData = EMPTY_ELEMENTDATA;
}
}
相关文章推荐
- 【JUC】JDK1.8源码分析之CopyOnWriteArrayList(六)
- ArrayList源码分析(JDK1.8)
- Java中ArrayList源码深入分析(JDK1.6)
- JDK源码分析(一)——ArrayList
- JDK源码分析-ArrayList分析
- 【集合框架】JDK1.8源码分析之ArrayList(六)
- ArrayList源码分析(基于JDK1.8)
- JDK中ArrayList、HashMap和HashSet的equals方法源码分析
- Java容器深入研究(jdk 1.8)--- ArrayList总结与源码分析
- JDK(二)java源码分析之ArrayList
- (7) java源码分析------之ArrayList (对应数据结构中线性表中的顺序表,JDK1.6)
- ArrayList源码分析 JDK1.8
- JDK源码解析---ArrayList分析
- 数组第二十四课,模拟ArrayList容器的底层实现,JDK源码分析
- 【集合框架】JDK1.8源码分析之ArrayList(六)
- java学习之旅59--模拟ArrayList容器的底层实现_JDK源码分析ArrayList
- java基础提高篇--集合源码分析--jdk1.8 ArrayList源码
- ArrayList源码分析(jdk1.8)
- ArrayList源码分析(基于JDK1.6)
- jdk源码分析之CopyOnWriteArrayList