[英]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.