libro
www.tuyano.com
初心者のためのJava SEプログラミング入門

コレクション・フレームワーク (2/5)

作成:2012-05-06 10:18
更新:2012-05-06 10:18

■リストの基本は「ArrayList」クラス

まずは、リストからです。リストは、配列の延長上にある感覚で扱えるコレクションクラスです。リスト関係のクラスの中でもっとも一般的に使われるのは「ArrayList」というクラスでしょう。これは、以下のようにしてインスタンスを作ります。
ArrayList 変数 = new ArrayList();
非常に簡単ですね。単にnewでインスタンスを作るだけです。こうして作成したインスタンスに、オブジェクトを追加していきます。では、オブジェクトの追加や修得に関するメソッドを整理しておきましょう。

・オブジェクトの追加
《ArrayList》.add( オブジェクト );
《ArrayList》.add( インデックス番号 , オブジェクト );
addは、オブジェクトを一番最後に追加するものです。第1引数にインデックス番号を指定すると、その場所に追加することもできます。「インデックス番号」というのは、保管しているオブジェクトに順番に割り振られている番号のことで、一番最初に追加したものがゼロ、次が1,その次が2……という具合に番号付けされています。配列と同じですね。

・オブジェクトの取り出し
Object 変数 = 《ArrayList》.get( インデックス番号 );
保管しているオブジェクトは、そのオブジェクトに割り振られているインデックス番号を指定して取り出します。getで番号を指定することで、その番号のオブジェクトが返されます。注意したいのは、「取り出されるオブジェクトは、みんなObjectインスタンスになっている」という点でしょう。

ArrayListを始め、コレクション・フレームワークのクラスでは、さまざまなオブジェクトを保管することができます。が、「なんでも入れられる」のですから、どんなクラスのインスタンスが保管されるかわかりません。それをうまく管理するため、コレクション・フレームワークではすべてのオブジェクトを一度Objectインスタンスにキャスト(型変換。ある型の値を別の型に変換すること)して保管するようにしているのです。

キャスト(型の変換)」というのは、整数などの値で既に登場しましたね。例えば、int型の値を実数にしたければ、「(double)値」というように書いてその型に変換することができました。これはオブジェクトでも同様です。クラスのインスタンスというのは、そのクラスと継承関係にあるクラスなら値をキャストすることができるのです。

すべてのクラスは、java.lang.Objectというクラスを継承して作られています。だから、どんなクラスでも、みんなObjectにキャストすることができるのです。で、取り出したら、それぞれで元のクラスにキャストしなおして利用しなさいよ、というわけです。

・オブジェクトの変更
Object 変数 = 《ArrayList》.set( インデックス番号 , オブジェクト );
これは、現在ArrayListに保管されているオブジェクトを変更するものです。引数には、インデックス番号と、新たに追加するオブジェクトを指定します。これで、指定したインデックス番号に保管されているオブジェクトを別のものに変更できます。返値には、それまで保管されていた古いオブジェクトが返されます。

・オブジェクトの削除
《ArrayList》.remove( インデックス番号 );
《ArrayList》.remove( オブジェクト );
ArrayListからオブジェクトを取り除きます。引数に整数を指定すると、そのインデックス番号のオブジェクトがとりのぞかれます。また取り除きたいオブジェクトを引数に指定することもできます。これは、あくまで「ArrayListから取り除く」ものであって、オブジェクトそのものを消してしまうわけではありません。

――とりあえず、これらのメソッドが頭に入っていれば、オブジェクトの出し入れは自由にできるようになるでしょう。この他にもう1つ、以下のメソッドもあわせて覚えておくと便利です。

・保管している要素の数を得る
int 変数 = 《ArrayList》.size();
ArrayListに保管されているオブジェクトの数を調べて返します。


――では、ArrayListの簡単な利用例を挙げておきましょう。下のリスト欄は、ArrayListにいくつかのテキストを保管した後、繰り返しで全テキストを取り出し表示しています。

ここでは、new ArrayListでインスタンスを作成した後、addで3つのテキストを追加しています。そしてforを利用し、getで順番にオブジェクトを取り出しては出力をしています。addでどのような順番で値が追加されているのかを考えると、出力される順番がよくわかります。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

import java.util.ArrayList;

public class TestApp {

	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		list.add("hello");
		list.add("bye");
		list.add(1, "-insert it!-");
		for(int i = 0;i < list.size();i++){
			Object obj = list.get(i);
			System.out.println("No," + i + ": " + obj);
		}
	}

}

※関連コンテンツ

「初心者のためのJava SEプログラミング入門」に戻る