访问HashSet的HashSet元素

时间:2015-01-24 10:55:07

标签: java

我制作了HashSet的HashSet。我想访问子集内的整数值。我的HashSet的HashSet是包含Set的所有子集的集合,如下所示: -

[[],[1],[2],[1,2],[3],[1,3],[4],[1,4],[2,3],[1, 2,3],[2,4],[3,4],[1,2,4],[1,3,4],[2,3,4],[1,2,3,4] ]

enter code here

代码如下所示:

public class Subsets {
public static void main(String[] args){
    Set<Set<Integer>> subsets1 = new HashSet<Set<Integer>>();
    Set<Integer> mySet = new HashSet<Integer>();
     mySet.add(1);
     mySet.add(2);
     mySet.add(3);
    subsets1 = powerSet(mySet);
        }
public static <E> Set<Set<E>> powerSet(Set<E> originalSet) {
    Set<Set<E>> sets = new HashSet<Set<E>>();
    if (originalSet.isEmpty()) {
        sets.add(new HashSet<E>());
        return sets;

    }
    List<E> list = new ArrayList<E>(originalSet);
    E head = list.get(0);
    Set<E> rest = new HashSet<E>(list.subList(1, list.size())); 
    for (Set<E> set : powerSet(rest)) {
        Set<E> newSet = new HashSet<E>();
        newSet.add(head);
        newSet.addAll(set);
        sets.add(newSet);
        sets.add(set);
    }       
    return sets;
}
    }

1 个答案:

答案 0 :(得分:1)

如果您使用的是java8,则可以使用forEach方法访问嵌套的Set<Integer>并调用另一个forEach来获取基础的Integer值。

内联代码示例到syso所有的Integer值:

subsets1.forEach(s -> s.forEach(s2 -> System.out.println(String.valueOf(s2))));

多行代码示例,可以进行更合格的操作:

subsets1.forEach(s -> {
        System.out.println("New set: ");
        s.forEach(s2 -> {
            System.out.println(String.valueOf(s2));
        });
    });

这将使用您给出的示例生成此输出:

New set: 
New set: 
1
New set: 
2
New set: 
1
2
New set: 
3
New set: 
1
3
New set: 
2
3
New set: 
1
2
3

这是你在找什么?

作为none java8用户,您可以遍历包含Integer值的集合:

for(Set<Integer> set : subsets1)
    {
        for(Integer i : set)
        {
            System.out.println(i);
        }
    }

考虑在嵌套循环中使用intInteger,因为自动装箱/自动取消装箱会在运行时造成巨大的性能问题。

相关问题