Java 关于List添加对象的坑


最近做题的时候,被List的add操作坑了一下

   List<List<Integer>> answer = new ArrayList<>();
   List<Integer> data = new ArrayList<>();
   public List<List<Integer>> binarySolution(int[] nums) {
        int len = nums.length;

        for (int mask = 0; mask < (1 << len); mask++) {
            data.clear();
            // 获取二进制位置为1的值对应的数
            for(int i=0;i<len;i++) {
                if((mask & (1<<i)) != 0) {
                    data.add(nums[i]);
                }
            }
            answer.add(new ArrayList<>(data));  // 就是这里!
        }
        return answer;
    }

因为List的add()方法放进去的是对象的地址(换种方式理解就是引用),放进去以后你对外部对象的修改是会影响到原先放进去的对象的值的(因为他俩指向的是同一个地址)。正确做法是新生成一个对象在添加,如上所示。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM