一、列表概述

List,顾名思义,是元素的有序序列。

当我们讨论List时,最好将它与Set(一组惟一的无序元素)进行比较。

下面是集合的类层次结构图。

从层次结构图中,您可以了解Java集合的一般概念。

二、ArrayList vs。LinkedList vs。Vector

在层次结构图中,它们都实现了List接口。

它们非常相似。

它们的主要区别在于它们的实现,这导致了不同操作的不同性能。

ArrayList实现为可调整大小的数组。

随着更多的元素被添加到ArrayList中,它的大小会动态增加。

它的元素可以通过使用get和set方法直接访问,因为ArrayList本质上是一个数组。

LinkedList实现为一个双链表。

它在添加和删除上的性能优于Arraylist,但在get和set方法上的性能则较差。

VectorArrayList类似,但它是同步的。

如果你的程序是线程安全的,ArrayList是一个更好的选择。

随着元素的增加,Vector和ArrayList需要更多的空间。

Vector每次都使其数组大小加倍,而ArrayList每次都增长其大小的50%。

LinkedList还实现了队列接口,它添加了比ArrayList和Vector更多的方法,如offer()、peek()、poll()等。

注意:ArrayList的默认初始容量非常小。

构造具有较高初始容量的ArrayList是一个好习惯。这样可以避免调整大小的成本。

三、ArrayList的例子

4. LinkedList的例子

如上例所示,它们与use类似。

真正的区别在于它们的底层实现和操作复杂性。

5. Vector

Vector和ArrayList几乎是相同的,区别在于Vector是同步的。

因此,它的开销比ArrayList大。

通常,大多数Java程序员使用ArrayList而不是Vector,因为他们可以显式地自己同步。

扩展阅读

ArrayList必知必会

Java ArrayList 工作原理及实现

ArrayList,LinkedList和String

关于Java编程,Vector、ArraysList和LinkedList有什么区别?

漫画算法:如何判断链表有环?