Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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中表示集合集时的混淆?_Java_Set - Fatal编程技术网

在Java中表示集合集时的混淆?

在Java中表示集合集时的混淆?,java,set,Java,Set,我想写一个程序,返回集合的幂集合。我最初的方法签名是:private static Set generate(Set s)首先,我对方法签名有疑问:关于方法中参数的类型-应该是Set s,还是我必须更具体一些,写一些类似HashSet s的东西?第二,我的方法的返回类型应该是什么?我可以作为返回类型Set编写吗?或者这不是一个好的做法,我必须更具体一些,即编写类似HashSet的内容 另一件我不太清楚的事情是:如果我像这样留下我的方法签名: 专用静态集生成(集s) 然后我想返回一些集合,它们将是

我想写一个程序,返回集合的幂集合。我最初的方法签名是:
private static Set generate(Set s)
首先,我对方法签名有疑问:关于方法中参数的类型-应该是
Set s
,还是我必须更具体一些,写一些类似
HashSet s
的东西?第二,我的方法的返回类型应该是什么?我可以作为返回类型
Set
编写吗?或者这不是一个好的做法,我必须更具体一些,即编写类似
HashSet
的内容

另一件我不太清楚的事情是:如果我像这样留下我的方法签名:

专用静态集生成(集s)

然后我想返回一些集合,它们将是结果。所以我写了这样的东西:

Set res=new HashSet()

但是编译器抱怨道。为什么我不能这样创建
res
,在这个问题中返回结果的最佳选择是什么。在Java中表示集合集的方法是什么?

set res=new HashSet();
Set<Set<Integer>> res = new HashSet<HashSet<Integer>>(); 
根据您的要求,您将创建一组集合。但您正在尝试创建一组hashset。所以编译器不允许这样做。因为集合的集合意味着外部集合可以包含任何集合实现。所以您不应该限制为hashset的集合

Set<Set<Integer>> res = new HashSet<Set<Integer>>(); 
Set res=new HashSet();
Set res=new HashSet();
根据您的要求,您将创建一组集合。但您正在尝试创建一组hashset。所以编译器不允许这样做。因为集合的集合意味着外部集合可以包含任何集合实现。所以您不应该限制为hashset的集合

Set<Set<Integer>> res = new HashSet<Set<Integer>>(); 
Set res=new HashSet();

关于
Set
vs
HashSet
的第一个问题,您一定要选择
Set
,因为:

  • 是一个接口,可替换为其任何实现,如:HashSet、TreeSet等;因此,您不应该仅将您的方法限制为接受
    HashSet

您可以更进一步,使用类似于
Set的内容,关于
Set
vs
HashSet
的第一个问题,您应该选择
Set
,因为:

  • 是一个接口,可替换为其任何实现,如:HashSet、TreeSet等;因此,您不应该仅将您的方法限制为接受
    HashSet

您可以更进一步,使用类似于
set的东西。您应该为复杂的数据结构创建一个包装器类。您可以将Set作为参数写入,因此此方法将使用任何实现Set的类。您应该为复杂的数据结构创建一个包装类。您可以将Set作为参数写入,因此此方法将期望任何实现Set的类或者,在Java 7+中,您可以只编写
Set res=new HashSet()谢谢,这真的很有帮助!如果我想与返回的类型
Set
保持一致,该怎么办?是
Set如果您想保持一致,我真的建议这样做,最好的方法是使用:
Set
作为返回类型,并以这种方式声明res变量:
Set Set=new HashSet()
这样,编译器就不会有任何抱怨,而且您可以向
res
变量添加不同类型的集合。例如,您完全可以这样做:
res.add(newtreeset())但也:
res.add(newhashset())谢谢,这真的很有帮助!如果我想与返回的类型
Set
保持一致,该怎么办?是
Set如果您想保持一致,我真的建议这样做,最好的方法是使用:
Set
作为返回类型,并以这种方式声明res变量:
Set Set=new HashSet()
这样,编译器就不会有任何抱怨,而且您可以向
res
变量添加不同类型的集合。例如,您完全可以这样做:
res.add(newtreeset())但也:
res.add(newhashset())
Set<? extends Set<Integer>> set = new HashSet<HashSet<Integer>>();