gpt4 book ai didi

Java 嵌套的 ArrayList 没有正确添加

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:03 26 4
gpt4 key购买 nike

我一直在尝试嵌套的 arrayList 方法。我有一个问题。

public static void main(String[] args) {
List<List<Integer>> list = new ArrayList<>();
List<Integer> subList = new ArrayList<Integer>(){{
add(1);
add(2);
}};
list.add(subList);
subList.clear();
subList.add(3);
subList.add(4);
list.add(subList);
System.out.println(list);
}

这没有给出预期的输出。结果是

[[3, 4], [3, 4]]

而不是 [[1, 2], [3, 4]]

我的代码有什么问题。

编辑:我还有一些关于代码的问题。我应该创建一个新问题还是将其添加到此处。

最佳答案

我建议您不要使用双括号初始化 new ArrayList<Integer>{{ }}因为它是一种反模式,还会创建匿名内部类。

至于错误,你应该初始化一个新列表而不是clear()

public static void main(String[] args) {
List<List<Integer>> list = new ArrayList<>();
List<Integer> subList = new ArrayList<>();
subList.add(1);
subList.add(2);
list.add(subList);
subList = new ArrayList<>();
subList.add(3);
subList.add(4);
list.add(subList);
System.out.println(list);
}

调用 clear 不会更改对 ArrayList 的引用,并将指向同一个对象。您应该通过调用 subList = new ArrayList<>() 创建一个新引用

关于双括号初始化的不良影响的好读物

https://blog.jooq.org/2014/12/08/dont-be-clever-the-double-curly-braces-anti-pattern/

编辑:正如@NoDataFound 所建议的,如果您使用的是 Java 8+,则创建列表的过程可以更加简化。

如果您使用的是 Java 8,则可以使用

创建一个列表
List<Integer> subList = Arrays.asList(1, 2);

如果你使用的是 Java 9+,你可以使用

List<Integer> subList = List.of(1, 2);

关于Java 嵌套的 ArrayList 没有正确添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56091572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com