如何静态初始化二维列表?
2022-09-01 22:43:00
如何静态初始化多维列表?
这有效:
List<List<Integer>> list = new ArrayList<List<Integer>>();
但我想用一些静态列表来初始化列表,例如:(1,2,3),(4,5,6)和(7,8,9)
如何静态初始化多维列表?
这有效:
List<List<Integer>> list = new ArrayList<List<Integer>>();
但我想用一些静态列表来初始化列表,例如:(1,2,3),(4,5,6)和(7,8,9)
这是一个古老的答案,但事情已经发生了一些变化。对于java 9 +,这可以使用返回不可变列表的方法完成,该列表是 的子类。List.of()
AbstractImmutableList
import java.util.List;
List<List<Integer>> list = List.of(
List.of(1, 2, 3),
List.of(4, 5, 6),
List.of(7, 8, 9)
);
对于旧版本的java,或者如果需要一个可变的,旧的答案仍然有效:List
如果创建帮助器方法,则代码看起来会更好一些。例如
public class Collections {
public static <T> List<T> asList(T ... items) {
List<T> list = new ArrayList<T>();
for (T item : items) {
list.add(item);
}
return list;
}
}
然后你可以做(使用静态导入)
List<List<Integer>> list = asList(
asList(1,2,3),
asList(4,5,6),
asList(7,8,9),
);
为什么我不使用 Arrays.asList()
Arrays.asList() 返回一个 java.util.Arrays.ArrayList 类型的类(它是 Arrays 的内部类)。我发现的问题是,人们很容易认为一个人使用的是java.lang.ArrayList,但它们的实现非常非常不同。
上面的注释也很旧,对于java 9 +使用。List.of(E...elem)
你可以这样做:
import static java.util.Arrays.*;
...
List<List<Integer>> list = asList(
asList( 1, 2, 3 ),
asList( 4, 5, 6 ),
asList( 6, 7, 8 ) );