将ArrayList添加到另一个ArrayList

时间:2014-10-19 20:34:27

标签: java object arraylist

我目前正在攻读 Java Programmer 1证书,下面是关于向另一个添加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?我们在这里有两个案例:

     

在第一个中,使用任一列表重新分配对象引用。在   在这种情况下,第二个列表中的值将保持不变。

     

在第二种情况下,您修改任何公共列表的内部   元素,在这种情况下,变化将反映在两者中   列表。

作者试图说什么?我对他提到的两起案件感到有点困惑!

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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());
    }

}