ArrayListクラス
ArrayListとジェネリクス
ジェネリクスでデータ型を指定してインスタンスを生成します。
ArrayList<E>
目次
1. ArrayListとは
ArrayListというのは、高機能な配列の様なクラスです。
ArrayListのインスタンスは、配列と同様に同じデータ型の値をたくさん保持できます。
配列は、初期化すると要素数を変更できない不便さがありましたが、
ArrayListは、要素を追加したり削除したりできます。
なお、array は日本語で配列のことです。
つまり、
要素数がフレキシブルなんだ。
おお~!!
ところで、
<クラス名> って
なんスか?
ここにクラス名を入れると
そのクラスのArrayListができるんだ。
保持するデータ型を
ここで指定するのね?
2. ジェネリクス(Generics)でデータ型を指定する
<クラス名>という記述は、ジェネリクス(Generics)という機能です。
ジェネリクスは、総称型などと訳されます。
インスタンス(あるいはメソッド)を使用する前に、取り扱うデータ型を指定できる仕組みです。
以下のサンプルをご覧ください。
//Sample00_01.java
class Sample00_01 {
public static void main(String[] args){
Gene<String> sampleA = new Gene<String>();
sampleA.setValue("string value generics");
String str = sampleA.getValue();
str += 1;
System.out.println(str);
Gene<Integer> sampleB = new Gene<Integer>();
sampleB.setValue(128);
int num = sampleB.getValue();
num += 1;
System.out.println(num);
}
}
class Gene<E>{
E value;
void setValue(E value){
this.value = value;
}
E getValue(){
return value;
}
}
コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample00_01.java
ws>java Sample00_01
string value generics1
129
Geneクラスの「E value」は、<E> で指定されたクラスの変数になる事を示しています。
変数 sampleA では、ジェネリクスに Stringクラスを指定していますので、
「E value」は、「「String value」と同じ意味になります。
str += 1 が文字列として計算されています。
変数 sampleB では、ジェネリクスに Integerクラスを指定しています。
今度は「E value」が、「「Integer value」と同じ意味になりました。
num += 1; が整数として計算されていることがわかると思います。
同じクラスのインスタンスでも、インスタンス化の際のジェネリクスによって、
扱う値が変化していることが分かります。
こんな感じで、
「様々なデータ型に対応できるけど、
使うときにはきちんとデータ型を指定したい」
という場合に使用する仕組みだ。
いまの時点で、ジェネリクスを使用したプログラムを作成する予定はありませんが、
ArrayListのように、ジェネリクスを使用したクラスを利用できるようになりましょう。
ラジャー!!
3. ジェネリクスにはクラス型しか指定できない
ジェネリクスにはクラス型しか指定できません。
え?
どうゆうことっスか?
「ArrayList<int>」とかは
ダメだ。
プリミティブ型を使いたい場合は
ラッパークラスを利用しよう。
それで「ArrayList<Integer>」
だったのね?
重要
ジェネリクスにはプリミティブ型を指定できません。
その様な場合には、ラッパークラスを利用しましょう。
それじゃあ早速次のページから
使い方を見ていこう。
お疲れ様でした。