在java中动态分配数组

时间:2016-01-10 09:22:23

标签: java arrays multidimensional-array

我对数组对象有问题。我尝试了这样的默认Java数组:

String[][] array = new String[5][5];

它有效。但现在我面临另一个问题。我不知道数组的大小,所以我需要一个动态分配的数组数组。我试过这个:

ArrayList<String> array = new ArrayList<>();
ArrayList<ArrayList<String>> arrayOfArrays = new ArrayList<>();

array.add("1");
array.add("2");
array.add("3");
arrayOfArrays.add(array);
System.out.println(arrayOfArrays);
array.clear();
array.add("4");
array.add("5");
array.add("6");
arrayOfArrays.add(array);
System.out.println(arrayOfArrays);

它打印出来:

[[1, 2, 3]]
[[4, 5, 6], [4, 5, 6]]

我不需要重写它。它应该是这样的:

[[1, 2, 3]]
[[1, 2, 3], [4, 5, 6]]

我很长时间都面临这个问题,我尝试了很多解决方法,但我需要一些聪明的解决方案。我也将不胜感激。

我还有第二个问题。如何在循环中添加它?因为它具有与第一种情况相同的输出。 例如:

for (int i = 0; i < array.size() - 1; i++) {
    arrayOfArrays.add(swap(array, i, i+1));       
}

2 个答案:

答案 0 :(得分:2)

您将两个相同的ArrayList实例添加到外部List

您需要创建两个不同的ArrayList个实例才能添加到arrayOfArrays

替换

array.clear();

array = new ArrayList<>();

答案 1 :(得分:1)

您应该知道,您只是使用相同的array对象,并将其添加到arrayOfArrays两次,这就是为什么它会打印两次相同的内容。

你需要的是这个:

    ArrayList<ArrayList<String>> arrayOfArrays = new ArrayList<>();

    ArrayList<String> array1 = new ArrayList<>();
    array1.add("1");
    array1.add("2");
    array1.add("3");
    arrayOfArrays.add(array1);
    System.out.println(arrayOfArrays);

    ArrayList<String> array2= new ArrayList<>();
    array2.add("4");
    array2.add("5");
    array2.add("6");
    arrayOfArrays.add(array2);
    System.out.println(arrayOfArrays);
相关问题