一种解决方法是在创建 List 时构造一个同步的 List: List list = Collections.synchronizedList(new LinkedList(...)); ArrayList 类 ArrayList 实现了可变大小的数组。它允许所有元素,包括 null。ArrayList 没有同步。 size,isEmpty,get,set 方法运行时间为常数。但是 add 方法开销为分摊的常数,添加 n 个元素需要 O(n)的时间。其他的方法运行时间为线性。 每个 ArrayList 实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个 容量可随着不断添加新元素而自动增加,但是增长算法 并没有定义。当需要插入大量元素 时,在插入前可以调用 ensureCapacity 方法来增加 ArrayList 的容量以提高插入效率。 和 LinkedList 一样,ArrayList 也是非同步的(unsynchronized)。 Vector 类 Vector 非常类似 ArrayList,但是 Vector 是同步的。由 Vector 创建的 Iterator,虽然和 ArrayList 创建的 Iterator 是同一接口,但是,因为 Vector 是同步的,当一个 Iterator 被创建 而且正在被使用,另一个线程改变了 Vector 的状态(例如,添加或删除了一些元素),这 时调用 Iterator 的方法时将抛出 ConcurrentModificationException,因此必须捕获该异常。 Stack 类 Stack 继承自 Vector, 实现一个后进先出的堆栈。 Stack 提供 5 个额外的方法使得 Vector 得以被当作堆栈使用。基本的 push 和 pop 方法,还有 peek 方法得到栈顶的元素,empty 方法测试堆栈是否为空, search 方法检测一个元素在堆栈中的位置。 Stack 刚创建后是空栈。 Set 接口 Set 是一种不包含重复的元素的 Collection,即任意的两个元素 e1 和 e2 都有 e1.equals(e2)=false,Set 最多有一个 null 元素。 很明显, Set 的构造函数有一个约束条件, 传入的 Collection 参数不能包含重复的元素。 请注意:必须小心操作可变对象(Mutable Object)。如果一个 Set 中的可变元素改变 了自身状态导致 Object.equals(Object)=true 将导致一些问题。 Map 接口 请注意,Map 没有继承 Collection 接口,Map 提供 key 到 value 的映射。一个 Map 中 不能包含相同的 key,每个 key 只能映射一个 value。Map 接口提供 3 种集合的视图,Map 的内容可以被当作一组 key 集合,一组 value 集合,或者一组 key-value 映射。 Hashtable 类 Hashtable 继承 Map 接口,实现一个 key-value 映射的哈希表。任何非空(non-null) 的对象都可作为 key 或者 value。 添加数据使用 put(key, value),取出数据使用 get(key),这两个基本操作的时间开销为 常数。 Hashtable 通过 initial capacity 和 load factor 两个参数调整性能。 通常缺省的 load factor 0.75 较好地实现了时间和空间的均衡。