关于ArrayList的构造方法:
1、ArrayList实现了List接口,底层是一个Object类型的数组Object[]。
2、默认无参数构造时数组长度为10,有参数构造时初始化指定长度的数组。
ArrayList list1 = new ArrayList(); // 初始化长度为0,当添加第一个元素的时候容量默认为10
ArrayList list2 = new ArrayList(20); // 指定初始化长度为20
3、注意:当列表容量满了时,继续添加元素时,数组会自动扩容,自动扩容到:旧容量 + (旧容量 >> 1),也就是1.5倍。
参考源代码:ArrayList中的grow()方法调用Arrays.copyOf()方法,Arrays.copyOf的参数中newCapacity()方法算出扩容1.5倍。
ArrayList底层是Object数组,数组的扩容效率很低,所以建议预先估计长度的大小,减少自动扩容的次数。
4、问题:这么多集合中,什么集合用的最多?为什么?
答:ArrayList集合。增加元素快,直接在数组末尾添加。检索效率高,有下标,每个元素存的大小是一样的,通过数学表达式很快计算出各元素的地址,直接定位。
5、数组的缺点
数组也有缺点,随机增加,删除元素效率低,需要元素移位;
另外数组不能存储大容量数据,因为很难在内存地址中找到一块大容量的连续的空间。
测试代码:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
public class Test06 {
public static void main(String[] args) {
ArrayList list1 = new ArrayList