我制作了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;
}
}
答案 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);
}
}
考虑在嵌套循环中使用int
或Integer
,因为自动装箱/自动取消装箱会在运行时造成巨大的性能问题。