簡體   English   中英

HashSet 未返回預期的 output

[英]HashSet not returning expected output

我想存儲唯一列表,所以我使用 HashSet。 但是,我沒有得到想要的 output。 這是我的代碼,你能告訴我出了什么問題嗎?

 public List<List<Integer>> threeSum(int[] nums) {
        
        Set<List<Integer>> res = new HashSet<>();
        
        for(int i = 0; i< nums.length; i++){
            
            int target = 0-nums[i];
            Set<Integer> neg = new HashSet<>();
            
            for(int j = i+1 ; j<nums.length; j++){
                
                int rem = target - nums[j];
                if(neg.contains(nums[j])){
                    res.add(new ArrayList<>(Arrays.asList(nums[i], rem, nums[j])));
                }
                else{
                    neg.add(rem);
                }
                
            }
        }
        System.out.println(res);
        return new ArrayList<>(res);
        
    }

這里我的數字是[-1,0,1,2,-1,-4] 我的 output 是[[-1,2,-1],[0,1,-1],[-1,0,1]] 為什么我將[0,1,-1][-1,0,1]都放入 res 中,因為它們都包含相同的元素。 我什么只有其中之一? 我應該怎么辦?

來自List.equals的Javadoc:

當且僅當指定的 object 也是一個列表時返回 true,兩個列表具有相同的大小,並且兩個列表中所有對應的元素對都相等。

因此, [0,1,-1][-1,0,1]不相等,盡管包含相同的元素,因為它們的順序不同。

解決這個問題的最簡單方法是對列表進行排序:

res.add(Stream.of(nums[i], rem, nums[j]).sorted().collect(toList()));

您可以在添加到Set之前對List進行排序,以便它們的順序相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM