Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HashSet未返回预期的输出_Java_Set_Hashset - Fatal编程技术网

Java 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+

我想存储唯一的列表,所以我使用HashSet。但是,我没有得到想要的输出。这是我的密码,你能告诉我出了什么问题吗

 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次以上的操作。正确!我遗漏了重复的元素。因此进行了编辑。