Не удается получить значения из deep ArrayList в Java

#java #arraylist

#java #arraylist

Вопрос:

Я пытаюсь сохранить и получить числа в имеющемся у меня ArrayList. У меня есть это в моем классе:

 private ArrayList<ArrayList> possibleNumbers = new ArrayList<ArrayList>();
  

Затем я заполняю его пустыми списками массивов, чтобы убедиться, что в нем есть что-то для каждого y

 for( int x = 0; x < grid[ y ].length; x   )
{
    possibleNumbers.get( y ).add( x , new ArrayList<Integer>());
}
  

Теперь, намного позже в моем коде, у меня есть ArrayList с парой чисел в переменной ‘list’, для этого списка установлены возможные числа:

 possibleNumbers.get( y ).set( x, list );
  

Позже я пытаюсь получить значение из вставленного списка:

 possibleNumbers.get( y ).get( x ).get( 0 );
  

Но теперь я получаю сообщение об ошибке:

 symbol  : method get(int)
location: class java.lang.Object
possibleNumbers.get( y ).get( x ).get(0);
                                 ^
  

Я действительно не могу понять, почему этот третий get не работает, а второй работает… Я надеюсь, что кто-нибудь сможет мне помочь.

Спасибо,

Крис

Комментарии:

1. Можете ли вы более точно описать, какие возможные числа должны быть / содержать? Я не уверен, что ваша структура данных соответствует вашим потребностям. «сохранить и получить числа в ArrayList» приведет к ArrayList<Число> …

Ответ №1:

Я предполагаю, что possibleNumbers это тип ArrayList<ArrayList<Object>> . Итак, объект, возвращаемый из possibleNumbers.get( y ).get( x ) , считается Object . Что произойдет, если вы его приведете?

Комментарии:

1. Спасибо, вы заставили меня осознать проблему, я использовал private ArrayList<ArrayList<ArrayList>> possibleNumbers = new ArrayList<ArrayList<ArrayList>>(); теперь, хотя это некрасиво, это полностью работает!!

Ответ №2:

Проблема в том, что вы пытаетесь перейти на три уровня вглубь двухуровневой структуры:

 possibleNumbers.get( y ).get( x ).get( 0 )
  
  • possibleNumbers является ли ArrayList<ArrayList<Object>>
  • possibleNumbers.get(y) является ли ArrayList<Object>
  • possibleNumbers.get(y).get(x) является ли Object

Вы не можете вызвать get(0) an Object .

Комментарии:

1. Что за странные отзывы в последнее время? Это идеальный, хорошо сформированный ответ. 1 для компенсации.

2. Отрицательный результат связан с тем, что это древовидная структура (и первоначальный ответ содержал только первое предложение, ведьма, на мой взгляд, неверна. Концептуально это древовидная структура)

3. Немного раздражает, что мы не можем понять, кто это делает. Время связаться с администраторами? Похоже, это стало чумой.

4. @bruno Насколько мы знаем, это может быть структура на миллион уровней, потому что объектом во внутреннем списке может быть что угодно. Кого это волнует? aix говорил о структуре списка, которая состоит из двух уровней.

5. @G_H пожалуйста, что произойдет, если вы знаете этого человека, так же, как вы никогда этого не знаете, просто игнорируйте это,

Ответ №3:

У вас есть список, содержащий списки:

 possibleNumbers //ArrayList<ArrayList>
  

Первый get вернет один из этих списков:

 posibleNumbers.get(y) //-> ArrayList
  

Второй get получит одну запись этого списка:

 possibleNumbers.get(y).get(x) //-> list entry
  

Так что финала get(0) слишком много.