2015-04-15 7 views
0

У меня возникли проблемы с доступом к ArrayList внутри другого 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 из ArrayLists, потому что я пытаюсь понять, как это работает. Любая помощь будет оценена :)

+2

В настоящее время вы не являетесь администратором arraylist. У вас есть архаист из Foo. Попробуйте изменить своего дурака на 'private static ArrayList > fooList = new ArrayList >();' –

ответ

1

Вот что делает ваша программа.

  1. У вас есть ArrayList из Foo называется fooList. Он может содержать Foo объектов, но не других ArrayList s.

  2. prepArrayLists добавляет содержимое 20 пустых ArrayList s к fooList. Они все пусты, поэтому ничего не добавлено.

  3. Вы пытаетесь получить первые Foo из fooList, и их нет. Это не выполняется с ошибкой компилятора, потому что вы не можете назначить FooArrayList<Foo>.

иметь ArrayListArrayList из х 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>>(); 

Вы все еще можете добавить ArrayList с в prepArrayLists, но temp должны быть объявлены как List<Foo>.

+0

Спасибо! Это очень помогает! : D – Sometowngeek

0

Вы объявили fooList как ArrayList<Foo>, то есть список Foo объектов. Вы не опубликовали сообщение об ошибке компилятора, но, вероятно, (правильно) сообщите, что Foo не может быть преобразован в ArrayList<Foo>.

Если вы хотите, чтобы это был список списков, вы должны объявить его как ArrayList<ArrayList<Foo>> или, возможно, ArrayList<List<Foo>>, или, может быть, даже ArrayList<Collection<Foo>>.

+0

Это помогло! Спасибо :) Как я могу получить к нему доступ? Использовать метод ArrayList.get(), как обычно? – Sometowngeek

Смежные вопросы