Java Basic API Listの使い方 〜Step2_2〜

【配列の扱いあれこれ】

配列を使用して様々なデータを検証、編集など
色々な処理を行いますが何かと不便なこともあります。
String[] args = new String[5];
の様に初期化した場合→test01();

サンプルソースのダウンロードができます。

この場合は、配列の数が決まるので困る時があります。
例:標準入力を受けるとき
byte[] b = new byte[5];
System.in.read(b);

上記の場合は、5文字までを受け取ることができます。
少なかったり多かったりすると上手くないのです。。。
なので前回はBufferedReaderを使用してそこを解消しました。

そこで、初めの配列(byte[] b)をString[], int[]などに変更した場合
かつ標準入力出ない場合はどうしたら良いでしょうか?

【Listクラスを使用する】

ここで、Listが出てきます。完全修飾名(完全クラス名)は
「java.util.List」クラスです。正しくはインターフェースクラスになります。
このインターフェースは以下のクラスに実装されています。
他にもあるけれど、使用頻度の高いものを記載します。

java.util.ArrayListクラス(完全修飾名)
java.util.LinckedListクラス(完全修飾名)
java.util.Vectorクラス(完全修飾名)

これらのクラスにはclass名の後に「implements java.util.List」
が記載されています。

これが「実装する」という意味です。
// インターフェースの定義
public interface List { ....}の様に記載します。
実際のjava.util.Listインターフェースの内容は
Eclipseを使用しているならListの文字の上で「F3」を押下すると
ソースを見ることができます。
実際のインターフェース定義は以下になります。

public interface List<E> extends Collection<E> {
    // Query Operations

インターフェース定義でも「extends」とありますが
とりあえず置いておきます。

ではインターフェースって何?となると思います。
インターフェースはクラスに実装(implements)することにより
インターフェースで複数のクラスを一つの変数で扱えます。

例として、ListはArrayListとLickedListをListの変数で使用できます。
List<String> list = new ArrayList<String>();
// OK牧場(笑)
List<String> list1 = new LinkedList<String>();
の様に別のクラスでも同じ変数で使用することができます。
【追伸】
List<変数の型>の「変数の型」の部分は、ジェネリクスと言います。
コードが長くなってくるとこのリストの中身はなんだった?
とわからなくなってしまいます。それを解消したのがこの
「ジェネリクス」です。
その他Map, Set, Vectorなどで使用します。

でわでわ