在 Java 中添加元素以级联 ArrayList



>我有以下列表来保存 3x3 矩阵值:

1 2 3 
4 5 6
7 8 9
List<List<Integer>> list = new ArrayList<>(); 

我想添加矩阵值,如下所示:

list.add(0, new ArrayList<Integer>{1, 2, 3});
list.add(1, new ArrayList<Integer>{4, 5, 6});
list.add(2, new ArrayList<Integer>{7, 8, 9});

但是遇到语法错误。那么,这是正确的方法,还是使用级联列表分配矩阵值的正确方法是什么?

您有以下选项:

  1. Java-9 及以上:

    List<List<Integer>> list = new ArrayList<>();
    list.add(List.of(1, 2, 3));
    list.add(List.of(4, 5, 6));
    list.add(List.of(7, 8, 9));
    
  2. 在Java-9之前:

    List<List<Integer>> list = new ArrayList<>();
    list.add(Arrays.asList(1, 2, 3));
    list.add(Arrays.asList(4, 5, 6));
    list.add(Arrays.asList(7, 8, 9));
    
  3. Integer[]List

    List<Integer[]> list = new ArrayList<>();
    list.add(new Integer[] { 1, 2, 3 });
    list.add(new Integer[] { 4, 5, 6 });
    list.add(new Integer[] { 7, 8, 9 });
    
  4. 使用流 API:

    List<List<Integer>> list = Stream.of(
    List.of(1, 2, 3), 
    List.of(4, 5, 6), 
    List.of(7, 8, 9))
    .collect(Collectors.toList());
    

没有短格式的语法来创建 ArrayList 并向其中添加项目,例如new ArrayList<Integer>{1, 2, 3}

如果你不需要 ArrayList,我建议使用List.of方法创建的不可变列表:

list.add(0, List.of(1, 2, 3));
list.add(1, List.of(4, 5, 6));
list.add(2, List.of(7, 8, 9));

如果出于某种原因必须使用 ArrayList,请按如下所示:

List<Integer> arrayList0 = new ArrayList<>();
arrayList0.add(1);
arrayList0.add(2);
arrayList0.add(3);
list.add(0, arrayList0);
// repeat for index 1, 2

不能直接指定要在ArrayList构造函数中添加的元素。相反,您可以这样做。

List<List<Integer>> list = new ArrayList<>();
list.add(0, List.of(1, 2, 3));
list.add(1, List.of(4, 5, 6));
list.add(2, List.of(7, 8, 9));

List<List<Integer>> list = new ArrayList<>();
list.add(0, Arrays.asList(1, 2, 3));
list.add(1, Arrays.asList(4, 5, 6));
list.add(2, Arrays.asList(7, 8, 9));

请注意,List.of返回一个不可变的列表。Arrays.asList返回一个可以set但不能add的列表。

选项 1:

list.add(new ArrayList<>(Arrays.asList(1, 2, 3)));
list.add(new ArrayList<>(Arrays.asList(4, 5, 6)));
list.add(new ArrayList<>(Arrays.asList(7, 8, 9)));

选项 2:

List<List<Integer>> list = new ArrayList<>();
List<Integer> subList;
int n = 1;
for(int i = 0; i < 3; ++i){
subList = new ArrayList<>();
for (int j = 0; j < 3; ++j){
subList.add(n);
n++;
}
list.add(subList);
}

你不能像这样初始化java ArrayList。 您可以通过以下方式执行此操作:

  1. 使用Arrays.asList

    new ArrayList<>(Arrays.asList(1, 2, 3((;

  2. 如果您使用番石榴

    Lists.newArrayList(1, 2, 3(

  3. 如果您使用 Java8

    Stream.of(1, 2, 3(.collect(Collectors.toCollection(ArrayList::new((

这是另一种解决方案,有点复杂,但它有效:

List<List<Integer>> list = new ArrayList<>();
ArrayList<Integer>row1 = new ArrayList();
ArrayList<Integer>row2 = new ArrayList();
ArrayList<Integer>row3 = new ArrayList();
row1.addAll(List.of(1, 2, 3));
row2.addAll(List.of(4, 5, 6));
row3.addAll(List.of(7, 8, 9));

list.add(0,row1);
list.add(1,row2);
list.add(2,row3);
System.out.println(list);

最新更新