1. List的实现类:
1) 最常见的两个实现类分别是ArrayList(用数组实现)、LinkedList(链表实现),但由于LinkedList具有双端队列的特性因此这里先不介绍LinkedList;
2) 早期List的实现类是Vector(也是用数组实现的),但是Vector是旧的标准,并且很多方面实现的不是很好,因此现在已经摒弃了,基本上都是用ArrayList这个新的标准;
!!并且Vector中的很多方法也不符合新的Java命名规范,因此现在基本不用Vector了,这里也就不讲了;
2. ArrayList:里面介绍的都是ArrayList的对象方法
1) 由于ArrayList是用数组实现的,因此内部维护这一个数组,这个数组的大小就是ArrayList可以存放元素的上限,如果元素超过该限度那么就会自动增长内部数组的长度来存放更多的元素;
2) 调节内部数组的长度:
i. void ensureCapacity(int minCapacity); // 将数组空间调整到至少能存放minCapacity个元素,默认长度是10
!!通常程序员无需关心ArrayList内部数组的长度,因为它可以自动调整,但是如果集合中要存放大量元素时频繁地增长数组也会降低性能,此时可以一次性先开辟一大块内存来避免频繁增长内部数组!使用该方法的前提是能很好的预估需要的长度;
ii. void trimToSize(); // 将内部数组的长度截断至刚好等于当前元素的个数(相当于100%瘦身)
!!一般只有在List已经确定不再改变后再调用该方法瘦身,这样可以最大程度节省内存空间;但一般数组仍处于长度可变的情况下不建议调用该方法(避免增长长度所带来的性能下降);
3. 只读的Arrays.ArrayList:
1) 可以用Arrays工具类的asList方法获取一个只读的ArrayList:static Arrays.ArrayList<T> asList(T... a);
2) 该方法可以直接用参数中的若干元素生成一个ArrayList;
3) 只不过该ArrayList是Arrays定义的内部类Arrays.ArrayList,它也其实就是ArrayList,但不过在Arrays的内部被修饰成了只读的,即不能修改,只能读取,并且是定长的(内部数组长度不能改变);
4) 如果对其修改会抛出运行时异常;