Java相当于python数组初始化

时间:2016-09-18 22:15:32

标签: java arrays arraylist multidimensional-array initialization

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有关,我不会回答。

3 个答案:

答案 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));