JAVA Collection 子接口之List
/----List: 存储有序的 可重复的数据
/----ArrayList : 始于JDK1.2,线程不安全的,效率高.底层使用 objec[]存储
JDK 7:
ArrayList lsit = new ArrayList(); // 创建一个长度为10 的 object数组 elementDate;
当 list.add添加超过数组长度的时候,扩容为原来长度的1.5倍,将原有数据复制到新数组中.
所以:建议使用带参数的构造器,声明其长度,避免扩容操作,提高效率.
JDK 8 :
声明变量的时候,不实例化.add操作的时候,才创建长度为10的object数组.
其他操作与JDK 7 一致.
小结:
JDK 7 中对象数组的创建,类似于单例模式下的饿汉式,JDK 8 类似于懒汉式.延迟了数组的创建,节省了内存.
/----LinkedList: 适用于频繁的删除/插入操作;底层使用双向链表存储.
private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
/----Vector: 始于JDK1.2,线程安全的,效率底;底层使用 object [] 存储.
JDK 7 8 都是直接创建长度为10的object数组
扩容的时候,直接扩大两倍.
输出结果:[1,2],要删除 2这个数字,需要装箱.