第5回: コレクション(1)

コレクション

コレクションとはデータの集合のこと。Javaにはコレクションを扱うライブラリが標準で含まれている。

よく使うコレクションとして、次の3つがある

java.util.ArrayList
順序の情報を保持するコレクション。同じ要素も格納できる。
java.util.HashSet
同じ要素格納できない。順序も保持できない。注: デメリットではない
java.util.HashMap
キーと値のペアで保持する。辞書のようなもの。

ArrayListの利用

ArrayListの後ろに中に格納するインスタンスの型を「<」と「>」で囲んで記述する。

addメソッドで追加する。

取り出すときはgetメソッドを使う。引数として0から始まるインデックスを指定する(配列の場合と同じ)。全てを取り出すときは、for文が使える。リストの要素数(サイズ)はsizeメソッドで取得することができる。

コレクションからデータを取り出すときには、「拡張for文」を使うと簡潔に記述できる。

自作のクラスのインスタンスを格納する場合も同様。

HashSetの利用

ArrayListと同様に利用出来るが、以下の違いがある。

  • 要素が順番に並んでるわけではないので、getメソッドが使えない。取り出すときは拡張for文で取り出す(他の方法としてIteratorを使う方法等があるが本講義では扱わない)。
  • 同じ要素は1つだけ格納される。下記のソースコードの場合、出力は3つになる。

格納する型(クラス)によっては、意図した通りにならない場合がある。例えば自作のPersonクラスの場合、「たろう」が2回、取り出されてしまう。これは、それぞれの「たろう」を表すインスタンスが「同じ」とみなされていないから、である。

「どうしたら意図したように動作するのか?」はまた後日解説するので、とりあえず、ここでは「HashSetが格納するのがStringのインスタンスなら大丈夫」と覚えておこう。

HashMapの利用

キー(key)と値(value)のペアで格納することができる。つまり辞書のようにデータを格納することができる。keyはSetで管理されるので、同じkeyを使って別の値を格納することはできないので注意。

インスンタンス化時、格納する型はkeyとvalueのそれぞれ指定する。

putメソッドで格納する。addメソッドではない点に注意。

取得はgetメソッドだが、インデックスではなく、keyを引数にする。

すでに格納されているkeyでputすると、上書きされる。

keyを取得したい場合は、keySetメソッドで、keyのSetを取得する。keyのSetから1つづつ取り出すのは、拡張for文を使う。

ソースコード全体