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インターフェースは大活躍します。
でわでわ。。。