多次元のArrayList - 萌えJava超入門
ArrayListクラス

多次元のArrayList

配列と同様に、多次元のArrayListが作れます。

ArrayList<ArrayList<E>> list2D
     = new ArrayList<ArrayList<E>>();

目次

1.書式


ジェネリクスで ArrayList<E> を入れ子にすると、多次元配列のように
多次元の ArrayListとして利用できます。

萌えJava超入門
誇張気味に書くと
こんな感じだろうか。
書式
ArrayList< ArrayList<クラス名> >

萌えJava超入門 萌えJava超入門
青い部分が
入れ子になってるんスね。


2.サンプルコード

萌えJava超入門 萌えJava超入門 萌えJava超入門
実際の使い方を見ないと
よくわからないだろう。
こんな感じだ。
//Sample11_01.java

import java.util.ArrayList;

class Sample11_01{
    public static void main(String[] args){

        ArrayList<ArrayList<String>> list2D
                = new ArrayList<ArrayList<String>>();

        //要素の追加
        ArrayList<String> list;

        //1行目(index 0)
        list = new ArrayList<String>();
        list.add("お名前 ");
        list.add("おなまえ  ");
        list.add("勇者服");
        list.add("刻印");
        list.add("特記事項");
        list2D.add(list);

        //2行目
        list = new ArrayList<String>(); //←list の初期化
        list.add("結城 友奈");
        list.add("ゆうき ゆうな");
        list.add("桃色");
        list.add("桜 ");
        list.add("知的に見える伊達メガネ");
        list2D.add(list);

        //3行目
        list = new ArrayList<String>();
        list.add("東郷 美森");
        list.add("とうごう みもり");
        list.add("青");
        list.add("朝顔");
        list.add("国防仮面");
        list2D.add(list);

        //4行目
        list = new ArrayList<String>();
        list.add("犬吠埼 風");
        list.add("いぬぼうざき ふう");
        list.add("黄色");
        list.add("オキザリス");
        list.add("女子力斬り");
        list2D.add(list);

        //5行目
        list = new ArrayList<String>();
        list.add("犬吠埼 樹");
        list.add("いぬぼうざき いつき");
        list.add("緑");
        list.add("鳴子百合");
        list.add("Deathの正位置");
        list2D.add(list);

        //6行目
        list = new ArrayList<String>();
        list.add("三好 夏凜");
        list.add("みよし かりん");
        list.add("赤");
        list.add("サツキ");
        list.add("にぼっしー");
        list2D.add(list);

        //要素の参照
        for(int i=0; i<list2D.size(); i++){
              System.out.printf("%02d\t", i);
              for(int j=0; j<list2D.get(i).size(); j++){//←それぞれの行の要素数

                    String str = list2D.get(i).get(j);
                    //インデントを気にせず表示
                    System.out.print(str + "\t");

                    /*インデントを合わせて表示
                    StringBuilder format = new StringBuilder();
                    format.append("%");
                    switch(j){
                        case 2:
                          format.append("-3");
                          break;
                        case 0:
                          format.append("-5");
                          break;
                        case 3:
                          format.append("-6");
                          break;
                        case 1:
                          format.append("-11");
                          break;
                        default:
                          break;
                    }
                    format.append("s\t");
                    System.out.printf(format.toString(), str);
                    */

              }
              System.out.println();//改行
        }
        System.out.println("end");
    }
}

コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample11_01.java
ws>java Sample11_01
00  お名前     おなまえ             勇者服  刻印        特記事項
01  結城 友奈  ゆうき ゆうな        桃色    桜          知的に見える伊達メガネ
02  東郷 美森  とうごう みもり      青      朝顔        国防仮面
03  犬吠埼 風  いぬぼうざき ふう    黄色    オキザリス  女子力斬り
04  犬吠埼 樹  いぬぼうざき いつき  緑      鳴子百合    Deathの正位置
05  三好 夏凜  みよし かりん        赤      サツキ      にぼっしー
end


    要素の追加
  • list2D の要素は ArrayList<String>型です
  • list2D.add(e) の引数も、ArrayList<String>型です
    ArrayList<String> list = new ArrayList<String>(); で、 追加する値を作成してから add しています。

    要素の参照
  • list2D.get(i)size() は、インデックス i の 一次元ArrayListの中に追加されている要素の数です
  • list2D.get(i).get(j) の戻り値は、インデックス i の 一次元ArrayListの中に追加されている j 番目の要素の値です
萌えJava超入門 萌えJava超入門
get(i).get(j) って
getメソッドが並んじゃっても
いいのね。

二次元のArrayList イメージ
img/ArrayList2D.png
画像をクリックして拡大してね。

萌えJava超入門
書き方が違うだけで。
配列とほぼ同じだ。


萌えJava超入門 萌えJava超入門
ところで、
この方々もやはり
レンジャー関係の方たちかな?
萌えJava超入門
国防的には
レンジャー関係かもしれませんが、
たぶん会長が思っているレンジャーとは
違うと思います。


3.実際の使い方

上述したサンプルは、ArrayListに格納する要素をリテラルで記述しましたが、
実際には、テキストファイルを読み込む際によく用いられます。
CSVファイルのように、スプレットシートをテキスト化しているファイルは、
二次元の ArrayListがとても便利に使えます。

萌えJava超入門 萌えJava超入門 萌えJava超入門
ArrayListは、テキストファイルを
読み込むプログラムと相性がいい。
近々に紹介しようと思う。
乞うご期待!!



お疲れ様でした。




© 2019 awasekagami