Vector,Arraylist,Linkedlist 三者都实现List接口,使用起来非常相似,区别主要在他们各自的实现,不同的实现导致不同的性能和操作。
ArrayList是为可变数组实现的,当更多的元素添加到ArrayList的时候,它的大小会动态增大。因为ArrayList本质上是一个数组,所以它的元素可以通过get/set方法直接访问。
LinkedList是为双向链表实现的,添加、删除元素的性能比ArrayList好,但是get/set元素的性能较差。
Vector与ArrayList相似,但是它是同步的。
如果你的程序是线程安全的,ArrayList是一个比较好的选择。当更多的元素被添加的时候,Vector和ArrayList需要更多的空间。Vector每次扩容会增加一倍的空间,而ArrayList增加50%。
(注意:ArrayList默认的初始空间大小相当的小,通过构造函数去初始化一个更大的空间是一个好习惯,可以避免扩容开销。)
ArrayList 例子:
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(3);
al.add(2);
al.add(1);
al.add(4);
al.add(5);
al.add(6);
al.add(6);
Iterator<Integer> iter1 = al.iterator();
while(iter1.hasNext()){
System.out.println(iter1.next());
}
LinkedList 例子:
LinkedList<Integer> ll = new LinkedList<Integer>();
ll.add(3);
ll.add(2);
ll.add(1);
ll.add(4);
ll.add(5);
ll.add(6);
ll.add(6);
Iterator<Integer> iter2 = ll.iterator();
while(iter2.hasNext()){
System.out.println(iter2.next());
}
Vector:
和ArrayList几乎是一样的,区别在于Vector是线程安全的,因为这个原因,它的性能较ArrayList差。通常情况下,大部分程序员都使用ArrayList,而不是Vector,因为他们可以自己做出明确的同步操作。
Arraylist和LinkedList 性能对比:
它们性能的区别很明显。对于Add和remove操作,LinkedList性能较好,但是get操作性能较差。基于上面的时间复杂度表和测试结果,我们可以得出什么时候使用ArrayList还是LinkedList。