如何初始化ArrayList的ArrayList

3

以下代码将用值为 true 初始化包含 9 个元素的 ArrayList。

public ArrayList<Boolean> timeTable = new ArrayList<Boolean>(Collections.nCopies(9, true));

但如何初始化ArrayList的ArrayList?
public ArrayList<ArrayList<Boolean>> timeTable = new ArrayList<ArrayList<Boolean>>(Collections.nCopies(9, true));

这应该意味着外部arraylist有9个内部arraylist,每个内部arraylist都有9个元素且值为true。
类似于如何在Java中使用所有零初始化ArrayList? 但不完全相同...
场景是我需要维护一个每月的日程表列表。现在每日时间表只有9个条目,因此不可变是可以接受的。但每个月的列表需要每月追加。因此它不能是一个arraylist。
2个回答

7
“返回一个不可变的列表,该列表由指定对象的 n 个副本组成。”
public ArrayList<Boolean> timeTable = new ArrayList<Boolean>(Collections.nCopies(9, true));

public ArrayList<ArrayList<Boolean>> timeTableLists = new ArrayList<ArrayList<Boolean>>(Collections.nCopies(9, timeTable));

情景是我需要维护一个每月的日程表列表。现在每天的时间表只有9个条目,所以不可变的数据结构是可以的。但每个月的列表需要追加,所以它不能是一个ArrayList。 - rajya vardhan
1
所以你的意思是timeTableList应该是可变的。那么你需要使用for循环。 - Razvan

4

首先,建议尽可能使用接口类型。这样可以使您的代码更加灵活和可扩展。

ArrayList<ArrayList<Boolean>> -> List<List<Boolean>>. 

那么,初始化语句将变为:
public List<List<Boolean>> timeTable = Collections.nCopies(9, (Collections.nCopies(9, true)));

1
不能保证 nCopies 返回一个 ArrayList,如果这是一个要求的话。 - Paul Tomblin
2
完全同意,但我怀疑ArrayList是否真的必要,List不能在这里胜任吗? - Vikdor
场景是我需要维护一个每月的日程表列表。现在每天的时间表只有9个条目,所以不可变的数据结构很好用。但每个月的列表需要追加,所以它不能是一个ArrayList。 - rajya vardhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接