我无法理解2D arraylists,他们让我很困惑,我可以理解2D数组但是我之前在C
和Python
中使用它们作为“嵌套列表”
谁能解释这两个代码之间的区别?
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]);
答案 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添加任何对象,例如null
,String
,Object
,String[]
。 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对象。