Takunojiのプログラミング・プレイグラウンド(遊び場)

「プログラミングのススメ」と学習した結果身につくもの、アイディアを実現するために何をしたら良いか?の答えが出せるようになります。

Java Console Game〜Listを使う〜

イントロダクション

前回は、dirコマンドの実装を行いました(オプション部分は未実装)
とりあえずで表示した、フォルダやファイルですが、Fileクラスの配列を取得して表示しました。(実装したらリンクを貼ります)
複数のオブジェクト(クラスや値)を扱う時は大体配列を使用します。

配列

前回の実装(実装したらリンクを貼ります)の様に指定したディレクトリ(フォルダ)の中を取得する時は「複数のオブジェクトを取得」する事が多いので配列でデータを取得しますが(Fileクラスの仕様)intやStringも同様に配列として扱う事が出来ます。

String[] strHaitetu = null;
int[] nums = new int{1, 2};

Stringは、参照型なので、nullで初期化できますが、intはプリミティブ型(値)なのでnullが使えません。
よくあるコードとしては以下の様なループ文です。

for (int i = 0; i < strHairetu.length; i++) { ...}

配列のサイズ分繰り返す。という処理になります。「...」の部分にそれぞれやりたい事を実装します。

注意

int型では、プリミティブ型なのでnullが使えませんが、配列になると「参照型になります」のでnullが使えます。

int[] a = null;

低レベルな話をすると、値(int)はメモリの領域を確保しますが、配列(int[])はメモリの領域の先頭のポインタを参照します。なので、この様な違いがあります。 配列の実装と起動確認

List

上記の配列を使いやすくしたクラスがJavaでは提供されています。それがListインターフェースクラスです。 このクラスはインターフェースと呼ばれるクラスで、実体(処理)がありません。じゃ動かないんじゃ?と思われますが、中身を入れてやる必要があります。

Listインターフェース

インターフェースとは…と話すとややこしいですので、ここでは下の様に理解して下さい。
List型の変数には、ArrayListクラスとLinkedListクラスを入れる事が出来る。具体的には以下の様なコードが書ける

List arrayList =. new ArrayList();
List linkedList = new LinkedList();

それぞれ、ArrayListクラスとLinkedListクラスは別物ですが、インターフェースで宣言するとどちらのクラスも一緒に、同じ変数て扱う事が出来ます。ちなみに左のリンク先には、その他のListインターフェース型で使用可能なクラスが載っています。

addとsize

上のメソッドを使用してリストへ要素の追加と取得を行います。

arrayList.add("aaa");
for (int i = 0; i < arrayList.size(); i++) {
    String value = arrayList.get(i);
    System.out.println("要素: " + value);
}

上のコードは「arrayList」の代わりにlinkedListを使用しても良いです。

配列とArrayList

ドキュメントを読むと可変長配列にしたものがArrayListだと記載がありますが、その通りに配列はサイズが決まっているのでデータの追加など器用な真似ができません、正確には配列のコピーを作りサイズを変更してやる必要がありますが、そういう面倒な部分をAPIがやってくれるというわけです。
そんなわけで、Listについて触れました、実装は後ほど。。。

まとめ

ディレクトリ検索などを行う時には複数のデータを取得する事が多いです。特にデータベースなどへのアクセスは大体複数のデータです。こんな時にListインターフェースは大活躍します。
でわでわ。。。