第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文を使う。

ソースコード全体

第4回: 復習3

クラスの基礎

コンストラクタ

インスタンス化するときに実行されるメソッドのこと[教科書P.137]。引数有りのコンストラクタを用意する(また、引数なしのコンストラクトを用意しない)ことによって、インスタンス化時にフィールドの値を設定する等の処理を行うことができる。

アクセス修飾子

メンバー(フィールド、メソッド)を、どこからアクセスできるか(読み書きできるか)を指定する[教科書P.137]。

クラスを拡張する

あるクラスを元に、新しくクラスを作る(継承する)ことができる。元になるクラスを「スーパークラス」、継承したクラスを「サブクラス」という。継承するにはextendsキーワードを使う[教科書P.126]。

オーバーライド

スーパークラスで定義されたメソッドを、サブクラスで書き換える(上書き)することができる。これをオーバーライドという[教科書P.131]。元のメソッドとオーバーライトしたメソッドを区別するにはsuperキーワードを使う[教科書P.127]。

第3回: 復習2

クラスの基礎

クラスを定義する

  • パッケージ宣言(1行目)で、クラスが所属するパッケージを指定する[教科書P.24]。
  • クラスには、メンバ(member)によって構成されている。メンバには値を保存するためのフィールド(field)と、処理をするためのメソッド(method)の2つがある[教科書P.114]。
  • メンバは、お互いに利用可能。上記の例では、メソッドbmiでフィールドwidthとheightを利用して計算している。

クラスを使う(インスタンスを作って使う)

  • クラスは「設計図」に位置づけられるので、そのままでは使えない。設計図から「実体」をつくってから利用する。実体のことをインスタンス(instance)という。クラスからインスタンスを作ることを「インスタンス化」という。
  • インスタンスの作成にはnew演算子を使う[教科書P.115]。
  • メンバを使うには、「.」を使う。
  • 同じパッケージのクラスあるいは、import宣言したクラスはパッケージを書かなくても使える(5行目と11行目を比較)。