我该如何静态地初始化多维列表?
这个方法可行:
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()
方法来完成此操作,该方法返回一个不可变的List,它是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;
}
}
然后你可以使用静态导入 (with a static import) 的方式进行操作。
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 ) );
Arrays.asList()
只有在需要只读列表时才有用,而且从中获取的 List
对象甚至不太适合这种情况。但它是 Java 提供的静态初始化 List
对象的最短方式,对于许多目的来说它都能很好地工作。 - x4uprivate static List<List<Integer>> list = new ArrayList<List<Integer>>();
static {
List<Integer> innerList = new ArrayList<Integer>(3);
innerList.add(1);
innerList.add(2);
innerList.add(3);
list.add(innerList);
//repeat
}
public static <T> List<T> asList(T... items) { return new ArrayList(Arrays.asList(items)); }
- developer033