Java等同于python数组初始化
Java equivalent to python array initialization
Java 中的这个与 Python 中的等价物是什么?
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。有没有办法做到这一点?
并且 ArrayList 不允许将原始类型作为泛型类型(如原始 int)。然后拥有引用类型没有默认值 0,因为它是一个对象。因此,关于将数组初始化为 0 的任何其他与原始 int 有关的问题都不会回答我的问题。
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);
}
要用零初始化 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);
}
In the example use the List <> to replace ArrayList as it is much
better ... and for references to this review
Type List vs type ArrayList in Java
在 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));
Java 中的这个与 Python 中的等价物是什么?
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。有没有办法做到这一点?
并且 ArrayList 不允许将原始类型作为泛型类型(如原始 int)。然后拥有引用类型没有默认值 0,因为它是一个对象。因此,关于将数组初始化为 0 的任何其他与原始 int 有关的问题都不会回答我的问题。
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);
}
要用零初始化 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);
}
In the example use the List <> to replace ArrayList as it is much better ... and for references to this review Type List vs type ArrayList in Java
在 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));