Java HashSet未返回预期的输出
我想存储唯一的列表,所以我使用HashSet。但是,我没有得到想要的输出。这是我的密码,你能告诉我出了什么问题吗Java HashSet未返回预期的输出,java,set,hashset,Java,Set,Hashset,我想存储唯一的列表,所以我使用HashSet。但是,我没有得到想要的输出。这是我的密码,你能告诉我出了什么问题吗 public List<List<Integer>> threeSum(int[] nums) { Set<List<Integer>> res = new HashSet<>(); for(int i = 0; i< nums.length; i+
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);
}
公共列表三和(int[]nums){
Set res=新的HashSet();
对于(int i=0;i 对于(int j=i+1;j您可以在添加到集合之前对列表进行排序,以便它们的顺序相同。来自以下的Javadoc:
当且仅当指定对象也是列表、两个列表的大小相同且两个列表中所有对应的元素对相等时,返回true
因此,[0,1,-1]
和[-1,0,1]
不相等,尽管包含相同的元素,因为它们的顺序不同
解决此问题的最简单方法是对列表进行排序:
res.add(Stream.of(nums[i], rem, nums[j]).sorted().collect(toList()));
“为什么我两个都要”因为它们是不同的。列表只有在它们包含相同顺序的相同元素时才是相等的。如果要忽略顺序,请对它们进行排序。谢谢,@AndyTurner,是否有任何方法可以只检查没有顺序的元素?是否有我遗漏的其他DS?还有其他数据结构;但您真的需要更多吗比列表排序复杂?对固定长度的列表进行排序是一个固定时间的操作。必须是,没有变量。对一个三元素列表进行排序需要3次以上的操作。正确!我遗漏了重复的元素。因此进行了编辑。