2016-03-16 5 views
-2

Привет, мне было интересно, могу ли я назначить ArrayList другому ArrayList (например, указателю?) В Java.Назначить arraylist arraylist

Вот пример, чтобы проиллюстрировать мою точку

public class FooBar 
{ 
    boolean Foo = true; 
    public ArrayList<String> listA = new ArrayList<String>(); 
    public ArrayList<String> listB = new ArrayList<String>(); 

    public void Bar() 
    { 
     ArrayList<String> whichList; 

     if(Foo) 
      whichList = listA; 
     else 
      whichList = listB; 

     for(String words : whichList) 
     { 
      // ... 
     } 
    } 
} 

Будет ли это работать?

+0

Было бы гораздо более образовательным для вас просто попробовать это и посмотреть, что произойдет. Вы также можете использовать это как возможность узнать, как выполнить код в своем отладчике IDE. Готовность экспериментировать - это фундаментальное требование стать разработчиком программного обеспечения. –

+0

Да @JimGarrison прав! –

+0

Пожалуйста, проверьте http://stackoverflow.com/questions/8441664/how-do-copy-the-contents-of-one-arraylist-into-another –

ответ

0

Конечно, это возможно, но вам нужно подумать: в чем причина, по которой я готов это сделать?

Если вы считаете, что изменения, внесенные с помощью новой ссылки, не повлияют на другой список, это неверно.

Если вы хотите, чтобы манипулировать данными без необходимости вносить изменения в первоначальный список, следующий будет интересно для вас

whichList = new ArrayList<>(listA); 

Это создаст новый объект в куче, с точно такими же данными, как в исходный список и изменения не повлияют на последний.


Другой вариант, если вы используете только списки в расширенных для цикла, вы можете сделать следующее, без необходимости использовать промежуточный список

public void Bar() { 
    for (String s : foo ? listA : listB) { 
     // doStuff 
    } 
} 

Тройная оператор помогает вам оценить булево значение foo. Если это правда, мы пройдем через listA, если false через listB

+0

благодаря тому, что расширенный цикл был тем, что я искал –

0

Да, это работа.

 whichList = listA; 

После этого заявления, whichList и listA будет указывать на тот же блок памяти.

Вы должны провести еще несколько исследований.

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