Java Collections是否添加方法不可变

时间:2018-02-07 21:11:14

标签: java collections

对不起,我已经纠正了逻辑a但是,我的要求是不同的。然而,在引用Java引用之后,它得到了澄清,它引入了另一个引用变量,同时将其推送到堆栈或列表或数组。

public class Node {

    public int data;
    public Node left;
    public Node right;

}

public static void main(String[] args) {
        Node[] arr = new Node[10];
        Stack<Node> s = new Stack<Node>();
        List<Node> ls = new ArrayList<Node>();
        List<Integer> list = new ArrayList<Integer>();
        for(int i = 0; i <10; i++) {
            Node a = new Node();
            a.data = i;
            s.push(a); -> another reference to a is created and pushed
            ls.add(a); -> another reference to a is created and pushed
            arr[i] = a; -> -> another reference to a is created and pushed
            a = null; // referencing it to null, makes one of the references 
                      //to null
        }

        for(Node i : s) {
            System.out.println("result"+i.data); // prints 1-9
        }
        for(Node i : ls) {
            System.out.println("result"+i.data); // prints 1-9
        }
        System.out.println(arr.length); // prints 10
        for(Node i : arr) {
            System.out.println("result2"+i.data); // prints 1-9
        }

    }

什么是堆栈的push()或list的add()使对象保持其值?即使我将其值设置为null。它是否像变量副本一样 感谢。

1 个答案:

答案 0 :(得分:1)

在实际代码中,当您访问数组的出界索引时,循环将引发异常:10
关于第二个循环中的打印问题,你会得到一个NPE,因为数组的第一个索引没有在你的第一个循环中被评估:你把它开始到1但是在第二个循环中你使用a来迭代所有数组的索引:0包含。
arr[0]nullarr[0].data只能提升NPE。

士气:将你的循环初始化为0以填充数组:

for(int i = 0; i < 10; i++) {...}

它避免了这种错误。