gpt4 book ai didi

列表的Java列表

转载 作者:行者123 更新时间:2023-11-30 06:58:57 24 4
gpt4 key购买 nike

我正在编写一个包含字符串列表的列表。

这就是它的样子:

List<List<String>> WPL = new ArrayList<List<String>>();
List<String> WP = new ArrayList<String>();

WP.add("A");
WP.add("B");
WPL.add(WP);

WP.clear();

WP.add("C");
WP.add("D");
WPL.add(WP);

for(List<String> a : WPL) {
System.out.println(a.indexOf(a));
for (String i : a)
{
System.out.println(i);
}

}

(列表将在以后自动生成并且更长)我得到的响应是

-1
C
D
-1
C
D

我需要的是

0
A
B
1
C
D

我做错了什么?

最佳答案

当您制作列表列表时,它不是复制值 - 它是将引用复制到源列表。所以当你

    WP.add("A");
WP.add("B");
WPL.add(WP);

WP.clear(); //this also clears the values in WPL since WPL doesn't store A and B, it stores a reference to WP.

WP.add("C");
WP.add("D");
WPL.add(WP);

为了解决这个问题,我建议为每个需要添加到其中的项目创建一个新列表。但也要小心记住,对原始源列表的任何更改也会反射(reflect)在 WPL 中。您也可以将 WP 设置为 ArrayList 的新实例(如果您需要引用回旧的 ArrayList,您可以通过 WPL 访问它,因为 WPL 实际上是存储对它的引用而不是直接存储值)。

    List<List<String>> WPL = new ArrayList<List<String>>();
List<String> WP = new ArrayList<String>();

WP.add("A");
WP.add("B");
WPL.add(WP);

WP = new ArrayList<String>();

WP.add("C");
WP.add("D");
WPL.add(WP);

for(List<String> a : WPL) {
System.out.println(a.indexOf(a));

for (String i : a)
{
System.out.println(i);
}

}

这里有一个很好的视频,它描述了引用类型和值类型之间的区别,如果你想更多地了解正在发生的事情(我建议这样做......这是一个你可能会遇到的主题以后再来)。

https://www.youtube.com/watch?v=eRfvgSvf-mM

关于列表的Java列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32108049/

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