Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ArrayListを引数分だけ増やす方法

お世話になっております。

早速の質問ですが、ArrayListの定義を引数によって
その引数分だけリストが作成される文を書きたいのですが
自分が調べた限りでは無かったので質問させていただきます。



下記は私のやりたい事のイメージです。(もちろんこれではエラーですが・・)
わかりにくいイメージで大変恐縮ですが・・

    int list_value = 10;


    for( i = 0; i < list_value; i++ ){
         ArrayList list(i) = new ArrayList();
           -----
           このiでlist0〜のリストを作成したい。
    }

  for( i = 0; i < list_value; i++ ){
         list(i).add((Integer) 0);
    }   

 list_valueの数だけlist(i)が作成され、listへの値の挿入もループで作成したい
のですが、やり方が見つかりませんでした。
 変な質問で申し訳ないのですが、良い方法がございましたら
ご回答よろしくお願いいたします。

15

回答

2885

閲覧

15件の回答

評価

0

やりたいことはつまり、
ArrayList<ArrayList>

じゃないのですかね。

評価

0

コロさん。
ご回答ありがとう御座いました。
しかし、私の勉強不足でArrayList<ArrayList>の
意味がわかりません。
調べてみたのですが見つからず、いまいち要領を得ていないです。

折角ご回答頂いたのに申し訳ないです。


・やりたい事
 リストをいくつ作るか、プログラムを書いた時点では判断できないので、キーボード入力で入力された数値によって、その分だけのリストを作成するプログラムを作りたい。

 やりたい事は最初と重複していますが・・
 

評価

0

コロさん。

ArrayList<ArrayList>の意味<ArrayList>を格納するArrayListで把握しました。

何とかできそうな気がしますので、実践してみたいと思ういます。

コロさん、ありがとう御座いました。

評価

0

List<List<Integer>>。

評価

0

><ArrayList>を格納するArrayList
そうです、そうです。

ジェネリクスは省略しないで書くのがオススメですよ。
#と、言いつつ私Integer省略しちゃってますね

>$様
ですね。

評価

0

 コロさん、$さん。

 ご回答ありがとうございました。

 コロさん、$さんにアドバイスを頂いて下記の様なプログラムを作成致しました。
 (listに入れる数値は違うのですが・・)

   ArrayList<ArrayList<Integer>> list0 = 
        new ArrayList<ArrayList<Integer>>();
   ArrayList<Integer> list1 = 
        new ArrayList<Integer>();
   
   int list_value = 10;

//データ入力のfor文はてきとうです・・
   for( a = 0; a < list_value ; a++){

      for( i = 0; i < list_value; i++ ){
           list1.add(i, i);
      }

      list0.add(a,list1);
   }

 これにより、list_value分の容量をもつlist1がlist0の中にlist_value分作成することができました。
 (変な言い回しみたいですね・・)
 他の箇所も作成しないといけないのでまだ動かしてはいないのですが、解決しそうです。

 本当にありがとうございました。


評価

0

>list1.add(i, i);

>list0.add(a,list1);

index順にしか追加しないなら、かなりムダ。
ArrayListのソースを読んでみよう。

評価

0

 $さん。

 ご指摘、ありがとうございました。

 >list1.add(i, i);
 >list0.add(a,list1);

 上記の意味ですが、初期値を最初に入力しておかないとsetで指定した箇所にデータを入力するとき、データが無く置き換えれないため、最初に適当(大体は0)を入力していました。書き方が変でした・・・申し訳ないです。

評価

0

書き方…?
初期値を順番に詰めるのは、add(index, Object)ではなくadd(Object)で十分だということだったんだけど、理解してる?

評価

0

 $さん。

 申し訳ないです、indexを省けるということを理解して
いなかったみたいです・・・。
 はじめにArrayListを使用したときからadd(index, Object)で初期値を設定していたのでadd(Object)をみていませんでした。
 
 アドバイスありがとうございました。

評価

0

およよ?
for( a = 0; a < list_value ; a++){
ArrayList<Integer> list1 = 
        new ArrayList<Integer>();

こうしないとダメじゃないかしら。

評価

0

ほんとだ。そこは参照について理解する教材になるね。

評価

0

コロさん、$さん。

 お付き合い頂き、ありがとうございます。
 
 私のやりたい事というのが、ArrayListはサブクラス(用語が間違っていたらすみません。)で使用したいと思っており、サブクラスでコロさんのご指摘内容を書きますとエラーが出てしまいます。
 文章で書くのもわかりにくいのでプログラムを記載いたします。
class Main{
   public static void main(String[] args){


   List list = new List();

   
   list.setValue();

   }
}


class List{
      
   ArrayList list1 = new ArrayList();
   ArrayList<ArrayList> list0 = new ArrayList<ArrayList>();

/*ここにforを書いてしまうとエラーに
   for( a = 0; a < list_value ; a++){
   ArrayList<Integer> list1 = 
           new ArrayList<Integer>();

   }
*/

/*ここに書くと下記のsetValueでシンボルが見つからないエラー
   void setList(){
      for( a = 0; a < list_value ; a++){
         ArrayList<Integer> list1 = 
                 new ArrayList<Integer>();    
   }
*/

   void setValue(){
      for( a = 0; a < list_value ; a++){
 
         for( i = 0; i < list_value; i++ ){
              list1.add(i);
         }

      list0.add(list1);
      System.out.println(a +" : "+ list0.get(a))
   }
}

 ただ、この書き方ですとlist1に次々にaddされていくため
欲しい結果になっていません。


  list_valueが3の場合
 欲しい結果:list0の0番目 1 :[0,1,2]               //1回目

       list0の1番目 2 : [0,1,2]               //2回目
       list0の2番目 3 : [0,1,2]               //3回目
                                                     
 現状の結果:list0の0番目 1 : [0,1,2]               //1回目
       list0の1番目 2 : [0,1,2,0,1,2]         //2回目
       list0の2番目 3 : [0,1,2,0,1,2,0,1,2]   //3回目

 欲しい結果を出すためにはメインクラスでコロさんのご指摘内容を書かないと
いけないということでしょうか?

 自分の勉強不足でご迷惑をお掛けしております・・・。
 また、やりたい事を確実にお伝えしてなかった事も申し訳ないです。
 

評価

0

 長々とお世話になっております。

 コロさんのご指摘内容ですと、解決いたしました!
 
 次は上記投稿の様にサブクラスで実現できる方法を
探してみたいと思います。

 

評価

0

クラス名は自分の処理のための特別なもの、どんな情報が格納されるのかを認識できるようにつけるべきだ。
ここに書くときに変えてるのかも知れないけど、Listなんて一般的な名前じゃだめ。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。