二维Int数组,固定,

时间:2016-01-17 16:00:56

标签: java

基本上我想创建一个二维整数数组:

 this.colors = new int[height][];

我知道第一维的大小,

但第二个维度应该是可变的,这样我就可以像这样添加值:

 this.colors[y].push( 40)

如何创建这样的数组并添加值?

我尝试了以下内容: 2 dimensional array list

3 个答案:

答案 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);

Live Example