一、ArrayList
1.ArrayList:其实是一个长度可变的数组:像数组一样提供下标访问数组,插入,移除元素会比较慢。
它的内部封装了一个长度可变的数组对象(初始容量为10(1.8之后初始容量为0,第一次调用add()方法时为10),根据元素的添加进行扩容操作)
2.通过源码的构造函数看(有三个构造函数):
①无参的构造方法:构造一个默认初始容量为10的空列表
②含参为一个指定元素列表
③含参为一个int型的指定数据:初始容量自己设定
3.ArrayList实现了List接口,在此基础上还多加了四个方法:
4.我们主要来看一下扩容的实现ensureCapacity(int minCapacity):
初始分配容量为10,当添加元素时进入扩容函数判断是否需要扩容:
进入此方法我们可以看到:
主要在grow()中进行扩容的操作:
二、LinkedList:
- LinkedListList :List接口的链接列表实现(初始不需要内存分配)。分配内存时,不要求是连续的,插入、删除比较快,访问比较慢(遍历)。
- 构造函数:
3.主要方法:
添加元素到列表头部:
添加元素到列表尾部:
获取第一个元素(不删除):
获取第一个元素并删除:
获取最后一个元素(不删除):
获取并删除最后一个元素:
迭代器:
从后往前遍历:
从指定位置开始遍历;