目次

コレクション

  • メソッドから返される集合や他のコレクションは、カプセル化を保つために不変である必要がある。
    • なぜならば不変でないとコレクション内部のオブジェクトへの参照を持つことができ、データを変更してしまうことあができてしまうからである。これを解決するためには、新たにnewでコピーしたものを返せばよい。
  • メソッドの戻り値がコレクションのときは、インタフェースクラスを型として指定するべきである。なぜならば実装クラスを型として指定すると、実装クラス側でバグが見つかった場合に実装を簡単に変更できないことがありえるからである。

例:

private List list_ = new LinkedList();

public List getList() {
	return list_;
}
  • Javaのコレクションは原則として基本型の要素を持つことができない。
    • 例えば、int型などの基本データ型の値をコレクションとして扱いたい場合は、ボクシングされた基本データ型(基本データ型のラッパクラス)を用いる必要がある。基本データ型の値を一旦Integerなどのオブジェクトにしてからコレクションを生成する。

コレクションの分類

 Javaのコレクションクラスは大きく分けて、Mapに属するものとCollectionに属するもの2タイプに分けられる。

  1. Map(java.util.Map)
    • 個々の要素をキーと値のセットで管理するクラス。
      • Perlなどでいう連想配列のことである。
      • キーと値を関連付ける、即ちマッピングして扱うというところからMapという名が付いている。
    • 通常の配列はインデックスと呼ばれる数値で個々の要素を管理するが、Mapでは数値だけでなく、文字列や別のクラスなどをキーにすることができる。
    • 同じキーを複数持つことはできない。各キーにはあらかじめ値が割り当てられており、使用されているキーに新しい要素が追加されると、マップは古い値を新しい値に上書きする。
  2. Collection(java.util.Collection)
    • 配列のような集合値を表すクラス。
    • このグループはCollectionインタフェースを実装したクラス、Collectionインタフェースを実装したクラスを継承したクラスから成り立つ。
    • 集合値に要素を追加・削除、指定位置に挿入・取得といった集合値操作のためのメソッドを備えているのが特徴である。

Mapグループ

  • Mapグループの配下には、ソート済みの連想配列を現すSortedMapグループがある。
    • SertedMapグループでは、2つの基準のいずれかを使ってセット内のオブジェクトの順序を保持する。
  • Mapグループ(インタフェース)を実装したクラスとして、AbstractMap,Attributes,HashMap,Hashtable,WeakHashMapなどがある。
  • Mapに格納されるキーと値のペアはエントリ(entry)と呼ばれる。
    • Mapの各エントリは、MapクラスのインナーインタフェースであるMap.Entry型のオブジェクトを使って表される。
  • Mapオブジェクトそのものから直接イテレータを取得することはできない。
    • Mapオブジェクト内で反復処理を行うためのイテレータを取得するためには、まずエントリのセットをSetオブジェクトとして取得する必要がある。その後、SetオブジェクトはCollectionグループの一員なので、iterator()メソッドを持つ。
      • エントリのセットを取得するにはMapオブジェクトからentrySet()メソッドを呼び出す。

Collectionグループ

 Collectionグループは、さらにListグループとSetグループに大別される。

  • Listグループ
    • 配列と同様に、インデックスによって順序付けられたコレクションを表す。
    • Listグループ(インタフェース)を実装したクラスとして、AbstractList,ArrayList,LinkedList,Vectorなどがある。
  • Setグループ
    • 要素が重複しないコレクション、つまり同じ値が2つ以上含まれないリストを表す。
    • 通常リスト内の要素は挿入された順に格納される。
    • Setグループ(インタフェース)を実装したクラスとして、AbstractSet,HashSet,LinkedSetがある。

参考文献

  • 『Java魂』