ArrayListとジェネリクス - 萌えJava超入門
ArrayListクラス

ArrayListとジェネリクス

ジェネリクスでデータ型を指定してインスタンスを生成します。

ArrayList<E>

目次

1. ArrayListとは


ArrayListというのは、高機能な配列の様なクラスです。
ArrayListのインスタンスは、配列と同様に同じデータ型の値をたくさん保持できます。
配列は、初期化すると要素数を変更できない不便さがありましたが、
ArrayListは、要素を追加したり削除したりできます。

なお、array は日本語で配列のことです。

萌えJava超入門
つまり、
要素数がフレキシブルなんだ。
インスタンスの生成 書式
ArrayList<クラス名> list = new ArrayList<クラス名>();

萌えJava超入門 萌えJava超入門
おお~!!
萌えJava超入門
ところで、
<クラス名> って
なんスか?
萌えJava超入門
ここにクラス名を入れると
そのクラスのArrayListができるんだ。



萌えJava超入門
保持するデータ型を
ここで指定するのね?


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; が整数として計算されていることがわかると思います。

同じクラスのインスタンスでも、インスタンス化の際のジェネリクスによって、
扱う値が変化していることが分かります。

萌えJava超入門
こんな感じで、
「様々なデータ型に対応できるけど、
使うときにはきちんとデータ型を指定したい」

という場合に使用する仕組みだ。

いまの時点で、ジェネリクスを使用したプログラムを作成する予定はありませんが、
ArrayListのように、ジェネリクスを使用したクラスを利用できるようになりましょう。

萌えJava超入門 萌えJava超入門
ラジャー!!


3. ジェネリクスにはクラス型しか指定できない

ジェネリクスにはクラス型しか指定できません。

萌えJava超入門
え?
どうゆうことっスか?



萌えJava超入門
「ArrayList<int>」とかは
ダメだ。
プリミティブ型を使いたい場合は
ラッパークラスを利用しよう。
萌えJava超入門
それで「ArrayList<Integer>」
だったのね?

重要
 ジェネリクスにはプリミティブ型を指定できません。
 その様な場合には、ラッパークラスを利用しましょう。

萌えJava超入門 萌えJava超入門 萌えJava超入門
それじゃあ早速次のページから
使い方を見ていこう。




お疲れ様でした。




© 2019 awasekagami