Java等价于python数组初始化



在Java中与Python中的等价是什么?

array_name = [0 for i in range(5)]

具体来说,我想创建一个二维Java数组列表,并将每个值初始化为0。这就是我所想的,在半伪代码中,遵循Python,但它显然不起作用:

ArrayList<ArrayList<Integer>> grid = new ArrayList<ArrayList<Integer>>() {{
    (add(Arrays.asList(0 for i : ROWS) for j : COLUMNS);
}};

其中ROWS和COLUMNS是在其他地方定义的常量。最后,我想要一个2D数组列表,由ROWS和COLUMNS常量给出的大小,每个值初始化为0。有办法做到这一点吗?

和数组列表不允许基本类型作为泛型(如基本类型int)。那么引用类型没有默认值0,因为它是一个对象。所以任何关于数组初始化为0的问题都与int基本类型无关

用0初始化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 <>来代替ArrayList,因为它太多了更好的…以及对这篇评论的参考Java中的类型列表和类型数组列表

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);
}

在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));

相关内容

  • 没有找到相关文章