基本上我想创建一个二维整数数组:
this.colors = new int[height][];
我知道第一维的大小,
但第二个维度应该是可变的,这样我就可以像这样添加值:
this.colors[y].push( 40)
如何创建这样的数组并添加值?
我尝试了以下内容: 2 dimensional array list
答案 0 :(得分:2)
在Java中,数组具有固定大小。根据您的要求,我建议使用列表:
List<Integer>[] colors;
使用它,您将能够做出这样的声明:
colors[y].add(40);
请注意,您还可以使用int[][]
多维数组,并在必要时使用Arrays.copyOf()
方法调整其大小。
答案 1 :(得分:1)
由于数组在Java中具有固定长度,因此您应该在此处使用ArrayLists。 虽然您知道第一个维度的大小,但在您的情况下很难组合数组和ArrayList。因此,最好的方法是在两个维度上使用ArrayLists构建矩阵:
ArrayList<ArrayList<Integer>> colors = new ArrayList<ArrayList<Integer>>();
// initialize outer arrays
final int height = 3; // this is your first known dimension
for (int i = 0; i < height; i++) {
colors.add(new ArrayList<Integer>());
}
// now all lists from the first dimension (height) are initialized with empty lists
// so you can put add some colors to height 0 like this ...
colors.get(0).add(1);
colors.get(0).add(4);
colors.get(0).add(5);
// ... or add one color to height 1
colors.get(1).add(7);
答案 2 :(得分:-1)
Java中的数组具有固定的大小。如您所示,要push
,您必须创建一个新的更大的数组,将现有条目复制到其中,然后添加您的条目。
通常,当您想要这样做时,您真的需要List<int[]>
,而不是LinkedList<int[]>
或ArrayList<int[]>
等。最后,当尺寸不会更改,您可以使用List#toArray<T>()
来获取数组。但这样可以动态添加新的数组,而不是现有数组的新条目。
或者,您可能需要一系列列表:
List<Integer>[] colors = new ArrayList[height];
// Oddly, we don't put <Integer> here ^
然后你可以填写数组中的每个条目
for (int n = 0; n < colors.length; ++n) {
colors[n] = new ArrayList<Integer>();
}
...然后你可以将(add
)推到任何一个列表上:
colors[n].add(40);