>我有以下列表来保存 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});
但是遇到语法错误。那么,这是正确的方法,还是使用级联列表分配矩阵值的正确方法是什么?
您有以下选项:
-
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));
-
在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));
-
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 });
-
使用流 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。 您可以通过以下方式执行此操作:
-
使用
Arrays.asList
new ArrayList<>(Arrays.asList(1, 2, 3((;
-
如果您使用番石榴
Lists.newArrayList(1, 2, 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);