【发布时间】:2021-11-07 15:37:15
【问题描述】:
我想要的输出应该是:[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
通过每次创建新的 ArrayList 对象
List<List<Integer>> result = new ArrayList<>();
for(int i = 1; i <= 5; ++i){
List<Integer> list = new ArrayList<>();
for(int j = 1; j <= i; ++j){
list.add(j);
}
result.add(list);
}
System.out.println(result);
我得到想要的输出为[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
但是,在尝试使用 clear() 时不会得到相同的结果(以避免在每次迭代中创建一个新对象),并且在 list Arraylist 上调用 clear() 时 result Arraylist 也会为空
List<Integer> list = new ArrayList<>();
List<List<Integer>> result = new ArrayList<>();
for(int i = 1; i <= 5; ++i){
for(int j = 1; j <= i; ++j){
list.add(j);
}
result.add(list);
list.clear();
}
System.out.println(result);
我使用 clear() 得到以下输出[[], [], [], [], []] --> 不是我想要的输出
如何在不每次都创建新对象(ArrayList 对象)并使用 clear() 或任何其他概念的情况下实现所需的输出。
result and list ArrayList 是指向同一个引用还是有其他原因导致输出不正确。请让我知道一些我不知道或缺少的关于 ArrayList 主题的内容。
【问题讨论】:
-
“结果和列表 ArrayList 是否指向同一个引用” - 是的,完全正确。
-
如果不每次都创建新对象(ArrayList 对象),您将无法获得所需的输出。这些列表是不同的,因此它们不能用同一个列表来表示。
-
这样想。您多次将同一个列表添加到父列表并在完成后将其清除,现在当您得到一个空列表列表时您会感到惊讶吗?如果您想要多个列表而不是多次使用同一个列表,则需要创建新列表。
-
"如何在不创建新对象(ArrayList 对象)的情况下实现所需的输出" 这是不可能的。
-
@LouisWasserman 也许,这是一个正确的术语问题。确实,没有办法创建新对象(具有不同的身份),但是这个任务does not require distinct storage,这意味着我们可以避免多次处理列表或填充新列表。
标签: java arraylist collections