2014-10-19 107 views
0

我目前正在爲Java程序員1證書學習,並且下面的一段代碼提出了將ArrayList添加到另一個的問題。將一個ArrayList添加到另一個ArrayList

ArrayList<String> myArrList = new ArrayList<String>(); 
      myArrList.add("One"); 
      myArrList.add("Two"); 
      ArrayList<String> yourArrList = new ArrayList<String>(); 
      yourArrList.add("Three"); 
      yourArrList.add("Four"); 
      myArrList.addAll(1, yourArrList); 
      for (String val : myArrList) 
      System.out.println(val); 

這是作者接着說:

如果你修改這些 名單,myArrList和yourArrList共有對象的引用會發生什麼?我們在這裏有兩種情況:

在第一個中,您使用任一列表重新分配對象引用。在 這種情況下,第二個列表中的值將保持不變。

在第二種情況下,您修改任何常見列表 元素的內部,在這種情況下,更改將反映在兩個 列表中。

作者試圖說什麼?我對他提到的兩個案例有些困惑!

任何幫助將不勝感激。

+0

我也弄不清楚。字符串不可改變,所以它們的內部狀態不能改變。 – 2014-10-19 20:40:03

+0

@JBNizet:這部分絕對處理ArrayLists而不是字符串。在本演示中,字符串被用作簡單的內容填充。 – 2014-10-19 20:41:10

+1

@MartijnCourteaux:*修改任何常用列表元素的內部元素*:列表中的元素是字符串,並且他會討論修改它們的內部元素。你能解釋作者的含義嗎? – 2014-10-19 20:43:44

回答

1

我想我知道作者想說什麼。但是Strings是一個很好的例子。想象一下這樣的事情。他正在解釋將兩個不同類別的實例添加到列表中,或將同一實例添加到兩個列表之間的區別。當您將同一實例添加到兩個列表中時,如果修改該實例,則更改將反映在兩個列表中。

import java.util.ArrayList; 

public class Example { 

    private static class Node { 
     private int value; 

     public Node(final int value) { 
      this.value = value; 
     } 

     public int getValue() { 
      return value; 
     } 

     public void setValue(final int value) { 
      this.value = value; 
     } 
    } 

    public static void main(final String... args) { 
     final ArrayList<Node> nodes1 = new ArrayList<>(); 
     final ArrayList<Node> nodes2 = new ArrayList<>(); 

     // add two different Node objects that happen to have same value 
     nodes1.add(new Node(1337)); 
     nodes2.add(new Node(1337)); 

     Node node = new Node(69); 

     // add the same node to both lists 
     nodes1.add(node); 
     nodes2.add(node); 

     node.setValue(420); 

     // do your join here and print result to see {1337, 420, 1337, 420} 
     nodes1.addAll(0, nodes2); 
     for (final Node n : nodes1) 
      System.out.println(n.getValue()); 
    } 

} 
+0

乾杯,清除了很多,你是對的字符串是一個壞榜樣! – 2014-10-20 08:36:03

相關問題