Python中与Java相当的是什么?
array_name = [0 for i in range(5)]
具体来说,我想创建一个二维Java ArrayList并将每个值初始化为0.这就是我所想的,在半假性代码中,遵循Python,但它显然不起作用:
ArrayList<ArrayList<Integer>> grid = new ArrayList<ArrayList<Integer>>() {{
(add(Arrays.asList(0 for i : ROWS) for j : COLUMNS);
}};
其中ROWS和COLUMNS是其他地方定义的常量。最后,我想要一个2D ArrayList,其大小由ROWS和COLUMNS常量给出,每个值初始化为0.有没有办法做到这一点?
并且ArrayLists不允许原始类型作为泛型类型(如原始int)。然后具有引用类型并不具有默认值0,因为它是对象。所以关于将数组初始化为0的任何其他问题都与原语int有关,我不会回答。
答案 0 :(得分:1)
ArrayList<ArrayList<Integer>> grid = new ArrayList<>();
for (int i = 0; i < ROWS; i ++) {
ArrayList<Integer> row = new ArrayList<>();
for (int j = 0; j < COLUMNS; j ++) {
row.add(Integer.valueOf(0));
}
grid.add(row);
}
答案 1 :(得分:1)
使用零初始化ArrayList
可以使用方法nCopies
int ROWS =3;
int COLUMNS=3;
List<List<Integer>> twoDimArray = new ArrayList<List<Integer>>();//declaration
for (int i = 0; i < ROWS ; i++) { // cant rows
twoDimArray.add(Collections.nCopies(COLUMNS, new Integer(0)));
//initialized to zero the number of columns you want
}
/* Print */
for (List<Integer> list : twoDimArray) {
System.out.println(list);
}
在示例中使用List&lt;&gt;因为它很多,所以要替换ArrayList 更好......以及对此评论的参考 Type List vs type ArrayList in Java
答案 2 :(得分:0)
在Java 8中,等效项为:
List<List<Integer>> grid = Stream.generate(() -> Collections.nCopies(COLUMNS, 0))
.limit(ROWS)
.collect(Collectors.toList());
请注意,您无法修改Collections.nCopies
返回的列表,因此更好的选择可能是:
List<List<Integer>> grid = Stream.generate(() -> new ArrayList<>(Collections.nCopies(COLUMNS, 0)))
.limit(ROWS)
.collect(Collectors.toList());
如果您确实需要将网格的类型设为ArrayList<ArrayList>
,请执行以下操作:
ArrayList<ArrayList<Integer>> grid = Stream.generate(() -> new ArrayList<>(Collections.nCopies(COLUMNS, 0)))
.limit(ROWS)
.collect(Collectors.toCollection(ArrayList::new));