Java 2D arraylists

时间:2018-02-01 10:11:20

标签: java arraylist

我无法理解2D arraylists,他们让我很困惑,我可以理解2D数组但是我之前在CPython中使用它们作为“嵌套列表” 谁能解释这两个代码之间的区别?

ArrayList<ArrayList<String>> biDemArrList = new ArrayList<ArrayList<String>>();
ArrayList<String> temp = new ArrayList<String>(); // added ()
temp.add("Hello world.");
temp.add("sup");
biDemArrList.add(temp);
ArrayList<String> it = new ArrayList<String>();
it.add("1");
it.add("0");
biDemArrList.add(it);
System.out.println(temp);
System.out.println(it);
System.out.println(biDemArrList);

和这一个:

ArrayList[][] table = new ArrayList[10][10];
table[0][5] = new ArrayList();
table[1][1] = new ArrayList();
for (int i = 0; i < 12; i++) {
    table[0][5].add("0");
}
for (int i = 0; i < 9; i++) {
    table[1][1].add("1");
}
System.out.println(table[0][5]);
System.out.println(table[9][9]);

5 个答案:

答案 0 :(得分:0)

类似于非原始类型的C数组未初始化(只有原始类型的数组是......)。

ArrayList[][] table = new ArrayList[10][10];
table[0][5] = new ArrayList();
table[1][1] = new ArrayList();

这里创建一个包含100个元素的数组,但只初始化2个元素。

答案 1 :(得分:0)

ArrayList是List接口的可调整大小的数组实现。这个班。大多数开发人员选择Arraylist over Array,因为它是传统java数组的一个很好的替代品。

您可以向List添加任何对象,例如nullStringObjectString[]ArrayList<String>也是对象,这意味着您可以添加到列表中。

你说我ArrayList可以添加其他ArrayList。结果将是ArrayList<ArrayList>>。 但我们只想将String添加到内部ArrayList中。我们创建了ArrayList<String>

所以,我们有字符串ArrayList<String>的列表,可以添加到其他列表ArrayList<ArrayList>>

    ArrayList<ArrayList<String>> mainArrayList = new ArrayList<ArrayList<String>>();
    ArrayList<String> subArrayList = new ArrayList<String>();

    /* Added elements into subArrayList */
    subArrayList.add("Yogesh");
    subArrayList.add("Pawar");

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

    /* Added elements into subArrayList2    */
    subArrayList2.add("Java");
    subArrayList2.add("Programmer");

    /* Adding elements into mainArrayList */
    mainArrayList.add(subArrayList);
    mainArrayList.add(subArrayList2);
    for (int i = 0; i < mainArrayList.size(); i++) {
        for (int k = 0; k < mainArrayList.get(i).size(); k++) {
            System.out.print(" " + mainArrayList.get(i).get(k));
        }
        System.out.println();
    }

答案 2 :(得分:0)

之间的区别

列表清单

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

List of List

ArrayList[][] table = new ArrayList[10][10];

第二个实际上是不是二维的,它是三维的。最终得到10个长度为10的数组,可以放入ArrayLists。如列表列表示例中您有一个列表,您可以将其他列表放入。

答案 3 :(得分:0)

使用Object[][]或原始[] [],你必须分配具有确切数量的&#34;行&#34;的2D数组。和&#34;列&#34;比如new Object[2][8]

另一方面,ArrayList<ArrayList<...>>尝试理解以下代码:

 ArrayList<ArrayList<String>> biDemArrList = new ArrayList<>();
    ArrayList<String> a0 = new ArrayList<>();
    a0.add("string_1");
    ArrayList<String> a1 = new ArrayList<>();
    a1.add("strfdfas");
    a1.add("adfadsfasdfasdfasfaf");

    biDemArrList.add(a0);
    biDemArrList.add(a1);

    biDemArrList.stream().forEach(System.out::println);

第一行&#34;行&#34;有一个元素,第二个有两个元素。这只是一个例子......使用arr [] []你无法做到这一点。

答案 4 :(得分:0)

这背后的理由不确定,但我会在这里分享我的经验,

数组是固定大小的数据结构,一旦我们初始化数组,我们就无法修改大小。为了解决这个问题,我们有了ArrayList来图片。 Arraylist有不同的长度。

在你的第二个代码片段中,如果你正在寻找固定大小的2D ArrayList,我建议去2D阵列。

如果您想从Collection功能中获益,稍后您可以将Arrays转换为ArrayList对象。