List接口

List接口的元素是有序、可重复的

一、Vector

public class Vector<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, Serializable

Vector实现了RandomAccess接口,因此可以通过下标进行随机访问,底层数据结构是数组结构。
Vector中的方法由于加了 synchronized 修饰,所以Vector的操作是线程安全的。
Vector实现了Cloneable,重载了clone()方法,因此可以进行克隆。
Vector实现了Serializable接口,因此可以进行序列化。

1、扩容机制

Vector默认初始容量为10(jdk7和jdk8一样都初始容量为10),加载因子为1(即当元素个数超过容量长度时,才进行扩容)。
扩容机制:扩展大小为原容量的 1倍,扩展后新容量为原容量的2倍。

如: Vector的容量为10,一次扩容后是容量为20

2、遍历方式

2.1、通过迭代器遍历
Iterator it=vector.iterator();
while(it.hasNext()){
    Systrm.out.println(it.next());
}
2.2、for循环遍历
for(int i=0;i<vector.size();i++){
	Systrm.out.println(vector.get(i));
}

或者使用增强for循环遍历

for( String value: vector){
	Systrm.out.println(value);
}
2.3、通过Enumeration遍历
Integer value=null;
Enumeration enu=vector.elements();
while(enu.hasMoreElements()){
	value=(Integer)enu.nextElement();
}

二、ArrayList

public class ArrayList<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, Serializable

ArrayList 继承自 AbstractList,实现了 List 接口。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。
ArrayList是线程不安全的,查询速度快。
底层数据结构是数组结构。

1、扩容机制

ArrayList 默认初始容量为10,(jdk8的时候底层Object[] elementData数组初始化为{},并没有创建长度为10的数组。在add元素时才创建了10个容量。)
扩容增量:扩容大小是原容量的 0.5倍,扩容后的新容量为原容量的1.5倍。

如:ArrayList的容量为10,一次扩容后是容量为15

2、方法

remove()方法

使用remove方法最好使用迭代器辅助进行

while (iterator.hasNext()) {
      Student student = iterator.next();  //一定要先iterator.next(),否则直接remove会报错
      iterator.remove();
}

三、LinkedList

public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, Serializable

LinkedList 的底层是由双向链表(也叫双链表)实现的,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。
LinkedList是线程不安全的,它的插入删除操作较快。

四、区别

ArrayList 和LinkedList 的区别

相同点:
1、都是线程不安全的,都实现了 List 接口
不同点:
1、实现方式不同,ArrayList 是基于数组结构实现的,LinkedList 是由双向链表实现的。
2、查询、增加、删除的效率不同,ArrayList 实现了 RandomAccess接口,可以通过下标访问,查询速度较快,但增删时可能会变动数组,效率不高;而LinkedList 在插入删除操作较快,查询速度较 ArrayList 慢(实际情况比较复杂,不一定都是这样)。
3、ArrayList 有扩容机制,扩容后的新容量为原容量的1.5倍;而LinkedList 没有扩容机制