2014-10-19 110 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

相关问题