ArrayList源码解析
核心点
1 | /** |
初始大小是10。如果你没有给他初始化大小的话。
- 构造函数:
1
2
3
4
5
6
7
8
9
10public 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);
}
}
这里初始化好两个空的列表,如果初始化大小是0,直接用,减小构造成本。
- 入队
1 | public boolean add(E e) { |
这里分几个步骤:
1、看看是否需要grow,需要的话grow
2、grow做的事就是调用System.copy,这个是native方法。扩容的大小是size+1
3、放入元素。
本文作者 : braveheart
原文链接 : https://zhangjun075.github.io/passages/ArrayList源码解析/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
知识 & 情怀 | 二者兼得