集合
集合是可以在其中儲存其他物件集合的物件。你可以使用 Generics 指定儲存在集合中的資料型別。
集合通常使用 java.util
或 java.util.concurrent
名稱空間。
Version <= Java SE 1.4
Java 1.4.2 及更低版本不支援泛型。因此,你無法指定集合包含的型別引數。除了沒有型別安全之外,你還必須使用強制轉換來從集合中獲取正確的型別。
除了 Collection<E>
之外,還有多種主要型別的集合,其中一些具有子型別。
List<E>
是一個有序的物件集合。它類似於陣列,但沒有定義大小限制。實現通常會在內部增大以容納新元素。Set<E>
是一組不允許重複的物件。SortedSet<E>
是一個Set<E>
,它也指定了元素排序。
Map<K,V>
是鍵/值對的集合。SortedMap<K,V>
是一個Map<K,V>
,它還指定了元素排序。
Version >= Java SE 5
Java 5 新增了一個新的集合型別:
Queue<E>
是要按特定順序處理的元素集合。該實現指定這是 FIFO 還是 LIFO。這淘汰了Stack
類。
Version >= Java SE 6
Java 6 增加了一些新的集合子型別。
NavigableSet<E>
是一款內建特殊導航方法的Set<E>
。NavigableMap<K,V>
是一款內建特殊導航方法的Map<K,V>
。Deque<E>
是一個可以從任何一端讀取的Queue<E>
。
請注意,以上專案都是介面。要使用它們,你必須找到適當的實現類,例如 ArrayList
,HashSet
,HashMap
或 PriorityQueue
。
每種型別的集合都有多個具有不同效能指標和用例的實現。
請注意, Liskov 替換原則適用於集合子型別。也就是說,SortedSet<E>
可以傳遞給期望 Set<E>
的函式。有關如何使用具有類繼承的集合的更多資訊,閱讀泛型部分中的有界引數也很有用。
如果要建立自己的集合,可能更容易繼承其中一個抽象類(例如 AbstractList
)而不是實現介面。
Version < Java SE 1.2
在 1.2 之前,你必須使用以下類/介面:
Vector
而不是ArrayList
Dictionary
而不是Map
。請注意,Dictionary 也是一個抽象類而不是一個介面。Hashtable
而不是HashMap
這些類已過時,不應在現代程式碼中使用。