介绍
利用java怎么对集合的子集进行求解?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>,java求解集合的子集的实例强>
方式1:我们知道子集个数2的n次方
比如a, b, c的子集
,,,,* 000,0,{}
,,,,* 001,1,,一个
,,,,* 010,2,,b
,,,,* 011,3,,a、b (b, a)
,,,,* 100,4,,c
,,,,* 101,5,,a、c (c)
,,,,* 110,6,,b, c (c, b)
,,,,* 111,7,,a, b, c
利用二进制的对应关系
@Test 公共空间test1()抛出异常{ Set比;子集=getSubsets (arrays . aslist (1、2、6)); Set 比;subsets2=getSubsets (arrays . aslist (“a",“b",“c")); Set 比;subsets3=getSubsets (arrays . aslist (& # 39; b # 39; & # 39; c # 39;, & # 39; d # 39;)); System.out.println(子集); System.out.println (subsets2); System.out.println (subsets3); }//集合接受各种类型数据 公共& lt; T>Set 比;getSubsets (List 分表){//考虑去重 Set 比;,allsubsets=new LinkedHashSet<的在(); int max=1 & lt; & lt;subList.size (); for (int循环=0;循环& lt;马克思;循环+ +){ int指数=0; int temp=循环; ArrayList & lt; T>currentCharList=new ArrayList ();//控制索引 而(临时比;0){ 如果(temp,1)比;0){ currentCharList.add (subList.get(指数)); } 临时的在祝辞=1; 指数+ +; } allsubsets.add (currentCharList); } 返回allsubsets; }
方式2:归纳法
@Test 公共空间testName()抛出异常{ Set比;subsets2=getSubsets2 (arrays . aslist (1, 2, 3)); System.out.println (subsets2); }//方式2归纳法//从{}和最后一个元素开始,每次迭代加一个元素组成一个新的集合 公共Set
比;getSubsets2 (List
列表){ 如果(list.isEmpty ()) { Set 比;,ans=new LinkedHashSet<的在(); ans.add (Collections.emptyList ()); 返回答; } 整数第一=list.get (0); List
休息=列表。子列表(1,list.size ()); Set 比;list1=getSubsets2(休息); Set
比;用于=insertAll(首先,list1);//System.out.println (list1); System.out.println(用于); System.out.println (“================?; 返回concat (list1,用于); } 公共Set
比;首先insertAll(整数,Set
比;列表){//Set
比;,结果=new LinkedHashSet<的在(); (List
列表:列出){ List ,复制=new ArrayList<的在(); copy.add(第一); copy.addAll(列表); result.add(副本); } 返回结果; }//这样写可以不影响lists1, lists2的值 私人Set 比;concat (Set
比;lists1 Set
比;temp=new LinkedHashSet<祝辞(lists1); temp.addAll (lists2); 返回临时; }
关于利用java怎么对集合的子集进行求解问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。