Javaで可変長x可変長の二次元配列を作成したいと思っています。
動的にメモリを取得する為にはArrayListを使うのかなと思いましたが
二次元配列は動的に取れなさそうで困っています。
どのようにするのがよいのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
(題意を配列サイズが実行時にきまる多次元配列の作り方と解釈しています)
Java言語の配列型はもともと動的に長さが決まります。というより、コンパイル時にサイズが確定する配列型は存在しません。
java
1int M, N; 2// 実行時にM,Nが決まると仮定... 3 4// 2次元配列を確保 5int[][] array = new int[M][N]; 6 7// 各要素にアクセス 8for (int i = 0; i < M; ++i) { 9 for (int j = 0; j < N; ++j) { 10 array[i][j] = (N * i) + j; 11 } 12}
投稿2015/07/17 12:58
編集2015/07/17 13:01総合スコア6191
0
ArrayList<ArrayList<Integer>>
のような使い方はどうですか?
投稿2015/07/17 11:22
総合スコア1342
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
以下のようにArrayListの二次元配列を作成可能です
java
1import java.util.ArrayList; 2 3 4class ES{ 5 6 7public static void main(String[] args){ 8 9 10ArrayList<ArrayList<Integer>> bounce=new ArrayList<>(); 11 12 13for(int a=0;a<3;a++){ 14 15ArrayList<Integer> dd=new ArrayList<>(); 16 17dd.add(a); 18 19bounce.add(dd); 20 21 22 23} 24 25 26 27 28} 29 30 31}
投稿2016/10/31 21:25

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
メモリというか、配列の要素数(サイズ)の話ですかね?
配列のサイズを動的に変えるのは面倒なんで、2次元配列ぐらいまでなら
List<List<String>>を使ったほうが楽ですね。
どうしても配列として使いたいなら、要素の追加・削除はListかkatoyさんの回答の様に
Mapを使ってやって、そのあとに配列に変換するといいですよ。
java
1 List<List<Integer>> fooList = new ArrayList<>(); 2 3 // 要素の追加削除処理 4 5 // 変換処理(なんかもっといい実装方法ありそうだけど…) 6 int x = fooList.size(); 7 int y = 0; 8 for (List<Integer> i : fooList) { 9 if (y < i.size()) { 10 y = i.size(); 11 } 12 } 13 Integer[][] foos = new Integer[x][y]; 14 for (int i = 0; i < x; i++) { 15 for (int j = 0; j < y; j++) { 16 try { 17 foos[i][j] = fooList.get(i).get(j); 18 } catch (IndexOutOfBoundsException e) { 19 foos[i][j] = null; 20 } 21 } 22 }
投稿2015/07/21 09:49
総合スコア297
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
HashMap<Integer, HashMap<Integer, String>> とすると、 array.get(i),get(j) として2次元配列風にアクセスすることはできます。
java
1import java.util.HashMap; 2 3public class Dim2 { 4 5 public static void main(String[] args) { 6 HashMap<Integer, HashMap<Integer, String>> dim2 = new HashMap<>(); 7 8 // dim2 に値を設定する。 9 HashMap<Integer, String> vec1 = new HashMap<>(); 10 vec1.put(0, "01-00"); 11 vec1.put(2, "01-01"); 12 dim2.put(1, vec1); 13 14 HashMap<Integer, String> vec3 = new HashMap<>(); 15 vec3.put(0, "03-00"); 16 vec3.put(1, "03-01"); 17 dim2.put(3, vec3); 18 19 // dim2 の内容を表示する。 20 for (int i = 0; i < 4; i++) { 21 for (int j = 0; j < 4; j++) { 22 System.out.print(get_val(dim2, i, j) + ",\t"); 23 } 24 System.out.println(); 25 } 26 } 27 private static String get_val(HashMap<Integer, HashMap<Integer, String>> dim2, int i, int j) { 28 if (dim2.get(i) == null) { 29 return null; 30 } 31 return dim2.get(i).get(j); 32 } 33}
実行結果
null, null, null, null, 01-00, null, 01-01, null, null, null, null, null, 03-00, 03-01, null, null,
投稿2015/07/17 23:31
総合スコア22328
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。