代表的なコレクションとその実装

Collectionインタフェースのサブクラス
代表的メソッドは、size、contains、iterator、add、remove、clear
■List
順序付けられた要素の集合を扱う。
要するに配列の代替。各要素にはインデックスを指定してアクセスする。
List特有のメソッドとしてsetがある。
setは任意のインデックスの要素を置き換える。addはリストの最後に要素を足す。
・ArrayList 内部的に配列で要素を構成。ランダムアクセスが高速。要素を追加する際に、コピーが発生するので追加、削除は遅い。
・LinkedList 内部的に各要素をリンクしている。ランダムアクセスが遅い(特に中心要素に近ければ近いほど遅い)。要素の追加、削除は前後のリンクを張り替えるだけで済むため速い。
・Vector(同期化されているArrayList。古い実装なので非推奨)
■Set
要素の重複を許可しないコレクション。
equalsメソッドの結果がtrueとなる要素が重複とみなされる。(ただし、HashSet、LinekedHashSetに関しては、hashCodeメソッドの結果も同一である必要がある)
addはすでに同じオブジェクトがあった場合、先勝ちとなる。
・HashSet 順序付けは不定。検索、追加、削除で内容の大きさを気にしないときはよく出来た汎用的な実装。
・LinkedHashSet 順序付けは挿入順。
・TreeSet 順序付けはソート順。HashSetよりも検索や修正は遅い。
■Queue
FIFOで要素が順序付けられる。キューはnullを受け付けるべきではない(実装によっては受付可能なものもあるらしい)。
・PriorityQueue 長さ制限のないキュー。nullを追加しようとすると、NullPointerExeptionをスローする。


Mapインタフェースのサブクラス
■Map
要素は「キー」と「値」のペアで格納され、get(“キー”)メソッドで要素にアクセスする。
代表的メソッドは、size、containsKey、containsValue、get、put、remove、clear
キーの重複は許されず、equalsメソッドの結果がtrueとなるキーが重複と見なされる。(ただし、HashMap、LinekedHashMap、Hashtableに関しては、hashCodeメソッドの結果も同一である必要がある)
putはすでに同じオブジェクトがあった場合、後勝ちとなる。
Collectionを拡張していないのは、このキーと値を扱うという特性による。
ただし、MapとCollectionの両方に意味のある概念は、同じ名前のメソッドで表現されており、マップはコレクションフレームワークの一部とみなすことができる。
・HashMap Mapのハッシュテーブル実装。Mapの汎用的な実装。検索と挿入がそこそこ優秀。
・LinkedHashMap HashMapのサブクラス。「挿入された順序」を保持するMap。ただし、コンストラクタの3番目の引数である、accessOrderをtrueにした場合は、「最後にアクセスされた順序」を保持する。
・TreeMap キーで要素をソートさせたSortedMapの実装。キーによる適度に高速な検索を必要とする場合に有用。
・HashTable HashMapによく似た古い実装。同期化されている点と、キーと値にnullを指定できない点が違う。基本的に非推奨。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です