List集合属于Collection接口中的
List集合特点:存储单例数据,存储有序数据,并且可重复。
List接口中常见的三种实现类
- ArrayList
- LinkedList
- Vector
三者的区别
ArrayList :出自jdk 1.2 , 线程不安全,效率高,底层使用Object [ ] 数组 ,查询速度快 。
jdk 7 中 ArrayList 调用空参构造器,底层是创建了长度为 10 的Object [ ] 数组 ,如果当插入超过了10 默认扩容为原来的1.5倍,同时将原有数组中的数据赋值到新的数组当中。
jdk 8 中 ArrayList 调用空参构造不会立即创建数组,当第一次使用add操作的时候底层才创建了长度为 10 的Object [ ] 数组 ,并吧数据存放进去,默认扩容为原来的1.5倍,同时将原有数组中的数据赋值到新的数组当中。
LinkedList :出自jdk 1.2 ,线程不安全,底层使用双向链表存储,对于删除,插入修改等操作要快。
jdk 7 和 8 ,底层是双向链表,LinkedList中两个重要的属性,first,和last,分别指向首节点和尾节点。每个节点(Node类型) 里面又有三个属性item、next、prev,分别指向当前元素、下一个元素、上一个元素、最终实现手拉手的结构
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 :出自jdk 1.0, 线程安全,效率低,底层使用Object [ ] 数组
调用空参构造器创建的是10的Object [ ] 数组 ,扩容为原来的2倍