2016-06-04 2 views
0

Я пытаюсь добавить объекты (в этом примере, чтобы сохранить простые строки) в Arraylists, которые собираются как Arraylist. Вот код:Java ArrayList из ArrayLists ведет себя странно при добавлении объектов

public static void main(String[] args) { 
    ArrayList dummylist = new ArrayList(); 
    ArrayList<ArrayList<String>> dummylistlist = new ArrayList<ArrayList<String>>(); 

    for (int j=0; j< 2; j++){ 
     dummylistlist.add(dummylist); 
     String text = "test"; 
     dummylistlist.get(j).add(text); 
    } 

    for (int j=0; j< 2; j++){ 
     System.out.println("arraylist "+j+" has size "+dummylistlist.get(j).size()); 
     System.out.println("Arraylist No."+j+" is ="+dummylistlist.get(j)); 
    } 
} 

И выход:

arraylist 0 has size 2 
Arraylist No.0 is =[test, test] 
arraylist 1 has size 2 
Arraylist No.1 is =[test, test] 

Но я ожидал, что это будет:

arraylist 0 has size 1 
Arraylist No.0 is =[test] 
arraylist 1 has size 1 
Arraylist No.1 is =[test] 

Почему метод добавления (текст) добавляет «тест «Строка для всех подсписок, чтобы она добавлялась после каждого цикла? Я не понимаю. Можете ли вы помочь мне исправить мой код для достижения последнего результата? Заранее спасибо.

+0

Не вызывайте 'dummylistlist.add (dummylist);' У вас есть только один список из-за этого, называемый 'dummylist'. – Kajal

+0

Вы дважды добавляете один и тот же список в свой список и из-за этого дважды добавляете «тест» в 'dummylist'. –

ответ

0

Проблема в том, что вы создаете только один список, который вы помещаете в другой. Таким образом, при вызове get(j) вы всегда получаете один и тот же внутренний список и добавляете к нему элемент. Если вам нужны разные списки, создайте их внутри цикла.

0

Если вы хотите работать, вы должны инициализировать dummylist переменную внутри цикла for Поскольку у вас есть только один экземпляр dummylist внутри вашего кода, это та же ссылка, что вы добавляете в каждой итерации цикла. Вот почему вам нужно создать новый экземпляр ArrayList на каждой итерации цикла

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