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