Java 查找集合(PowerSet)的所有子集

Java 查找集合(PowerSet)的所有子集,java,set,Java,Set,我想找到给定集合的所有子集。 我得到了如下定义的字符串集:HashSet L,我想在循环中使用它的所有子集:对于每个do something。 有没有一种简单且复杂度低的方法可以做到这一点?所以你想找到一个集合的所有非空子集,对于集合{ab},它是{a}{b}{ab}? 也许不是最快的解决方案,但您可以逐个检查集合中的所有元素,从第一个元素开始,确定所有非空集合->第一个元素,转到第二个元素,复制到目前为止存储的所有集合,并向所有复制的集合添加新元素和仅包含新元素的新集。现在,您有了以前元素的所

我想找到给定集合的所有子集。 我得到了如下定义的字符串集:
HashSet L
,我想在循环中使用它的所有子集:对于每个do something
有没有一种简单且复杂度低的方法可以做到这一点?

所以你想找到一个集合的所有非空子集,对于集合{ab},它是{a}{b}{ab}? 也许不是最快的解决方案,但您可以逐个检查集合中的所有元素,从第一个元素开始,确定所有非空集合->第一个元素,转到第二个元素,复制到目前为止存储的所有集合,并向所有复制的集合添加新元素和仅包含新元素的新集。现在,您有了以前元素的所有子集,再加上所有这些集合的集合,这些集合添加了额外的元素,再加上一个单独包含新元素的集合。然后可以对所有元素重复此操作,并应给出所有非空子集

Set<String> inputSet = new HashSet<String>();

inputSet.add("a");
inputSet.add("b");
inputSet.add("c");
inputSet.add("d");

List<Set<String>> subSets = new ArrayList<Set<String>>();
for(String addToSets:inputSet) {
    List<Set<String>> newSets = new ArrayList<Set<String>>();
    for(Set<String> curSet:subSets) {
        Set<String> copyPlusNew = new HashSet<String>();
        copyPlusNew.addAll(curSet);
        copyPlusNew.add(addToSets);
        newSets.add(copyPlusNew);
    }
    Set<String> newValSet = new HashSet<String>();
    newValSet.add(addToSets);
    newSets.add(newValSet);
    subSets.addAll(newSets);
}

for(Set<String> set:subSets) {
    for(String setEntry:set) {
        System.out.print(setEntry + " ");
    }
    System.out.println();
}
好的,我使用了这个算法(
L
是一组字符串):

powerSet=newhashset();
List mainList=新阵列列表(L);
buildPowerSet(mainList,mainList.size());
以及

private static void buildPowerSet(列表、整数计数)
{
电源集添加(列表);

对于(int i=0;i到目前为止你的家庭作业做得怎么样?@monkjack实际上这不是家庭作业。这只是工作……看看这里(这是谷歌搜索“java中的powerset”的第一个结果)->
d 
d b 
b 
d c 
d b c 
b c 
c 
d a 
d b a 
b a 
d c a 
d b c a 
b c a 
c a 
a
powerSet = new HashSet<List<String>>();
List<String> mainList = new ArrayList<String>(L);
buildPowerSet(mainList,mainList.size());
private static void buildPowerSet(List<String> list, int count)
{
    powerSet.add(list);

    for(int i=0; i<list.size(); i++)
    {
        List<String> temp = new ArrayList<String>(list);
        temp.remove(i);
        buildPowerSet(temp, temp.size());
    }
}