我在访问另一个ArrayList中的ArrayList时遇到了麻烦。 像这样:
public class Bar{
private static ArrayList<Foo> fooList = new ArrayList<Foo>();
public static void main(String[] args){
prepArrayLists();
// This is what's not working (the next two lines)
ArrayList<Foo> temp = fooParent.get(0);
temp.add(new Foo(23, "Cows", true);
}
private static void prepArrayLists(){
for (int x = 0; x < 20; x++){
fooList.addAll(new ArrayList<Foo>());
}
}
}
编译器不允许我这样做。我想要做的是将组件的ArrayList(Foo)放入另一个ArrayList中,我可以将其排序用于其他目的。
我想坚持使用ArrayList的ArrayList,因为我试图看看它是如何工作的。任何帮助将不胜感激:)
答案 0 :(得分:1)
这是您的计划所做的事情。
您有一个名为ArrayList
的{{1}} Foo
。它可以包含fooList
个对象,但不包含其他Foo
s。
ArrayList
将20个空prepArrayLists
的内容添加到ArrayList
。它们都是空的,所以没有添加任何内容。
您正试图从fooList
中获取第一个Foo
,而且没有fooList
。{li>
这会因编译错误而失败,因为您无法将Foo
分配给ArrayList<Foo>
。
要拥有ArrayList
ArrayList
Foo
个fooList
,您需要ArrayList<ArrayList<Foo>>
成为ArrayList<Foo>
,而不是addAll
。您需要将prepArrayLists
中的add
行更改为ArrayList
,以便将每个fooList
添加到ArrayList
。这样您就可以编译代码以获取第一个Foo
并为其添加新的fooList
。
您可能希望将private static List<List<Foo>> fooList = new ArrayList<List<Foo>>();
声明如下,以便将&#34;代码跟随到界面&#34;准则。
ArrayList
您仍然可以在prepArrayLists
中添加temp
,但List<Foo>
需要声明为{{1}}。
答案 1 :(得分:0)
您已将fooList
声明为ArrayList<Foo>
,即Foo
个对象的列表。您没有发布编译器错误消息,但它可能(正确地)告诉您Foo
无法转换为ArrayList<Foo>
。
如果您希望它是列表列表,您应该将其声明为ArrayList<ArrayList<Foo>>
,或者可能ArrayList<List<Foo>>
,或者甚至ArrayList<Collection<Foo>>
。