配列の横に別の[]を追加することで、配列に次元を追加できることを知っています。しかし、java.util.ArrayListに複数のディメンションを含めることはできますか?どうすればこれを達成できますか?
3 に答える
List<ArrayList<Integer>> twoDArrayList = new ArrayList<ArrayList<Integer>>();
@rgettmanの答えは仕事を成し遂げますが、注意すべきいくつかの注意点があります:
警告1:寸法
最も一般的な使用例では、配列の次元は事前に定義されています。次に例を示します。
int[][] array = new int[5][6];
その場合、配列は定義された次元の「長方形」形式になります。
0 1 2 3 4 5
0 [][][][][][]
1 [][][][][][]
2 [][][][][][]
3 [][][][][][]
4 [][][][][][]
以下のコメントで別のメンバーが示唆しているように、それだけではありません。「2次元配列」は単に他の配列の配列であり、上記のコード行は次の略記です。
int[][] array = new int[5][];
array[0] = new int[6];
array[1] = new int[6];
array[2] = new int[6];
array[3] = new int[6];
array[4] = new int[6];
または、子配列をさまざまなサイズでインスタンス化することもできます。その場合、「データ形状」は長方形ではなくなります。
int[][] array = new int[5][];
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];
array[3] = new int[6];
array[4] = new int[3];
0 1 2 3 4 5
0 [][]
1 [][][][]
2 []
3 [][][][][][]
4 [][][]
このArrayList<ArrayList<Integer>>
アプローチを使用すると、実行された操作の結果として、関連するすべてのリストの長さが長くなる「リストのリスト」が作成されます。
寸法を事前に定義するための省略形はありません。子リストをマスターリストに挿入してから、データ要素を子リストに挿入する必要があります。したがって、データの形状は2番目の例に似ています。
0 [][] <- list with 2 elements
1 [][][][] <- list with 4 elements
2 [] ...and so on
3 [][][][][][]
4 [][][]
警告2:データのデフォルト値
配列を使用すると、プリミティブデータ型(「int」など)と、対応するボックス化されたデータ型(「整数」など)を使用できます。要素のデフォルト値に関しては、これらの動作は異なります。
int[][] array1 = new int[5][6]; // all elements will default to 0
Integer[][] array2 = new Integer[5][6]; // all elements will default to null
リスト(他のすべてのコレクションと同様)では、ボックス化されたタイプのみを使用できます。したがって、リストの長さを事前に定義することは可能ですが、その要素のデフォルト値は常にnullになります。
List<Integer> = new ArrayList<Integer>(10); // all elements will default to null
はい、可能です。あなたの要素ArrayList
もあるだけArrayLists
です。
ArrayList<ArrayList<Integer>> twoDArrayList = new ArrayList<ArrayList<Integer>>();
これは、だけArrayLists
でなく、他のコレクションタイプでも機能します。
はい、できます!通常の配列では、中括弧の2番目のペアを追加すると、配列型のオブジェクトを格納する通常の配列が作成されます。ここでも同じことができ、ArrayListにArrayList型のものを保持させることができます。ArrayList<ArrayList<Object>> list = new ArrayList<ArrayList<Object>>();