2015-05-13 2 views
1

Я добавил элемент к списку a, а затем добавил список a в список b и сделал то же самое снова.Добавление элементов ArrayList в другой ArrayList из ArrayList

Мой вопрос, если я печатаю b.get(0) и b.get(1), я получаю один и тот же список, который как элементы "One" и "Two", почему это так?

b.get(0) Я хочу получить только один элемент, который я добавил, это a.add("One").

После добавления a.add("Two"), если я печатаю b.get(1) Я должен получить как "One", так и "Two"?

Есть ли какие-либо решения или какие-либо изменения для управления этим?

List<String> a= new ArrayList<String>(); 
List<List<String>> b= new ArrayList<List<String>>(); 

a.add("One"); 
b.add(a); 

a.add("Two"); 
b.add(a); 

System.out.println("b="+b.get(0)); 
System.out.println("b="+b.get(1)); 

выход:

b=[One, Two] 
b=[One, Two] 
+0

вы все еще работает на том же экземпляре 'ArrayList', следовательно, список' b' на индекс один и два относятся к тому же экземпляру 'ArrayList' – SomeJavaGuy

+0

https://www.youtube.com/watch?v=TWFIKR3Yn0o –

ответ

5

Вы добавляете один и тот же список в два раза, так что вы видите одни и те же элементы для обоих показателей внешнего списка.

Для того, чтобы добавить два различных List с, вы должны создать новый ArrayList перед добавлением каждого элемента к наружному List:

a.add("One"); 
b.add(a); 

a = new ArrayList<>(a); // assuming you want the second list to contain both "One" and "Two" 
a.add("Two"); 
b.add(a); 
0

Вы добавляете ту же ссылку в Ь [0] и б [1 ]. Если вы хотите иметь Differente списки на Diferent индекса списка б вы должны создать новый объект List

 List<String> a= new ArrayList<String>(); 
    List<String> c= new ArrayList<String>(); 
    List<List<String>> b= new ArrayList<List<String>>(); 
    a.add("One"); 
    b.add(a); 

    c= new ArrayList<String>(); 
    c.addAll(a); 
    c.add("Two"); 
    b.add(c); 

    System.out.println("b="+b.get(0)); 
    System.out.println("b="+b.get(1)); 
0

причина находится в вашем коде, b.get (0) и b.get (1) точка в тот же список a, поэтому выход такой же.

использование этого кода может достигать того, что вы хотите, Список a1 = новый ArrayList(); Список a2 = новый ArrayList(); Список> b = новый ArrayList>();

a1.add("One"); 
    b.add(a1); 

    a2.add("Two"); 
    b.add(a2); 

    System.out.println("b="+b.get(0)); 
    System.out.println("b="+b.get(1)); 

выход, б = [Один] б = [Два]

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