1.ArrayList是一个相对来说比较简单的数据结构,最重要的一点就是它的自动扩容,可以认为就是我们常说的“动态数组”。
来看一段简单的代码:
1
2
3
4
5
| ArrayList<String> list = new ArrayList<String>();
list.add("语文: 99");
list.add("数学: 98"); list.add("英语: 100"); list.remove(0); |
在执行这四条语句时,是这么变化的:
其中,add
操作可以理解为直接将数组的内容置位,remove
操作可以理解为删除index为0的节点,并将后面元素移到0处。
2. add函数
当我们在ArrayList中增加元素的时候,会使用add
函数。他会将元素放到末尾。具体实现如下:
1
2
3
4
5
| public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; } |
我们可以看到他的实现其实最核心的内容就是ensureCapacityInternal
。这个函数其实就是自动扩容机制的核心。我们依次来看一下他的具体实现