如何在另一个ArrayList中访问或添加ArrayList?

时间:2015-04-15 18:21:40

标签: java arraylist

我在访问另一个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,因为我试图看看它是如何工作的。任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

这是您的计划所做的事情。

  1. 您有一个名为ArrayList的{​​{1}} Foo。它可以包含fooList个对象,但不包含其他Foo s。

  2. ArrayList将20个空prepArrayLists的内容添加到ArrayList。它们都是空的,所以没有添加任何内容。

  3. 您正试图从fooList中获取第一个Foo,而且没有fooList。{li>

    这会因编译错误而失败,因为您无法将Foo分配给ArrayList<Foo>

  4. 要拥有ArrayList ArrayList FoofooList,您需要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>>