java.util
のコレクションフレームワークは、通常の配列では提供できない機能を持つ一連のデータの汎用クラスを提供します。
Collectionsフレームワークには、 Collection<O>
メインサブインタフェースList<O>
とSet<O>
、およびマッピングコレクションMap<K,V>
インタフェースが含まれています。コレクションはルートインターフェースであり、他の多くのコレクションフレームワークによって実装されています。
コレクションは、その内部に他のオブジェクトのコレクションを格納できるオブジェクトです。 ジェネリックスを使用して、コレクションに格納されているデータの種類を指定できます。
コレクションは、通常、 java.util
またはjava.util.concurrent
名前空間を使用します。
Java 1.4.2以下はジェネリックをサポートしていません。そのため、コレクションに含まれる型パラメーターを指定することはできません。型の安全性を持たないことに加えて、キャストを使用してコレクションから正しい型を戻す必要があります。
Collection<E>
加えて、複数の主要なコレクションがあり、そのうちのいくつかにはサブタイプがあります。
List<E>
は、オブジェクトの順序付けられたコレクションです。これは配列に似ていますが、サイズの制限を定義していません。実装は、通常、新しい要素に対応するために内部的にサイズが大きくなります。 Set<E>
は重複を許可しないオブジェクトの集合です。 SortedSet<E>
は要素の順序付けも指定するSet<E>
です。 Map<K,V>
はキーと値のペアの集合です。 SortedMap<K,V>
は、要素の順序付けも指定するMap<K,V>
です。 Java 5では、新しいコレクション型が追加されました。
Queue<E>
は、特定の順序で処理される要素の集合です。この実装は、これがFIFOかLIFOかを指定します。これは、 Stack
クラスを廃止します。 Java 6では、いくつかの新しいコレクションのサブタイプが追加されています。
NavigableSet<E>
は、特別なナビゲーションメソッドが組み込まれたSet<E>
です。 NavigableMap<K,V>
は、特別なナビゲーションメソッドを組み込んだMap<K,V>
です。 Deque<E>
はどちらの端からでも読み取れるQueue<E>
です。 上記の項目はすべてインターフェイスです。それらを使用するには、 ArrayList
、 HashSet
、 HashMap
、 PriorityQueue
などの適切な実装クラスを見つける必要があります。
各タイプのコレクションには、パフォーマンスメトリックとユースケースが異なる複数の実装があります。
Liskov Substitution Principleがコレクションのサブタイプに適用されることに注意してください。それは、されSortedSet<E>
期待して関数に渡すことができますSet<E>
。クラスの継承でコレクションを使用する方法の詳細については、GenericsセクションのBounded Parametersを参照すると便利です。
独自のコレクションを作成する場合は、インタフェースを実装する代わりに抽象クラス( AbstractList
など)のいずれかを継承する方が簡単です。
1.2より前のバージョンでは、代わりに次のクラス/インタフェースを使用する必要がありました。
ArrayList
代わりにVector
Map
代わりにDictionary
。 Dictionaryはインタフェースではなく抽象クラスでもあることに注意してください。 HashMap
代わりにHashtable
これらのクラスは廃止されており、最新のコードでは使用しないでください。