我有一个多维List
List<List<Integer>> myList;
我希望在运行时指定它的维度,因此在代码中,我放入:
myList = Collections.synchronizedList(new ArrayList<List<Integer>>(n));
我希望这会将mylist
初始化为一个具有n个元素的列表,每个元素都有0个元素,但这没有发生。我只得到一个空列表。显然,构造函数"构造一个具有指定初始容量的空列表",这并不是我想要的。
我知道我可以循环mylist
和add()
空一维列表,但是有什么方法可以用更少的代码实现我想要的吗?
首先,构造函数ArrayList<T>(int capacity)
没有在列表中插入任何元素,因此您没有指定大小,而是指定初始容量。
基本上允许列表最多插入n个元素,而不需要内部调整大小。
所以外链表仍然为空。不能使用Collections.fill
,因为每次都需要不同的内部List<Integer>
,而fill
只会将所有元素设置为相同的引用。因此,您必须手动插入它们:
for (int i = 0; i < n; ++i)
myList.add(new ArrayList<Integer>());
请注意,在任何情况下,由于您将其指定为List<List<Integer>>
(这是有意义的),Java将无法默认初始化任何东西,因为List<Integer>
只是一个接口。