19

配列の横に別の[]を追加することで、配列に次元を追加できることを知っています。しかし、java.util.ArrayListに複数のディメンションを含めることはできますか?どうすればこれを達成できますか?

4

3 に答える 3

25
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
于 2013-03-08T02:07:51.263 に答える
24

はい、可能です。あなたの要素ArrayListもあるだけArrayListsです。

ArrayList<ArrayList<Integer>> twoDArrayList = new ArrayList<ArrayList<Integer>>();

これは、だけArrayListsでなく、他のコレクションタイプでも機能します。

于 2013-03-08T01:28:51.253 に答える
0

はい、できます!通常の配列では、中括弧の2番目のペアを追加すると、配列型のオブジェクトを格納する通常の配列が作成されます。ここでも同じことができ、ArrayListにArrayList型のものを保持させることができます。ArrayList<ArrayList<Object>> list = new ArrayList<ArrayList<Object>>();

于 2014-12-02T12:12:14.073 に答える