利用java怎么對集合的子集進行求解

利用java怎么對集合的子集進行求解?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

成都創新互聯公司2013年成立,是專業互聯網技術服務公司,擁有項目成都網站設計、成都網站制作網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元慶云做網站,已為上家服務,為慶云各地企業和個人服務,聯系電話:18980820575

 java求解集合的子集的實例

方式1:我們知道子集個數 2的n次方

比如a,b,c的子集

     * 000  0  {}
     *001  1   a
     *010  2   b
     *011  3   a,b (b,a)
     *100  4   c
     * 101  5   a,c (c,a)
     * 110  6   b,c (c,b)
     * 111  7   a,b,c

利用二進制的對應關系

@Test 
public void test1() throws Exception { 
   
  Set<ArrayList<Integer>> subsets = getSubsets( Arrays.asList(1,2,6)); 
  Set<ArrayList<String>> subsets2 = getSubsets( Arrays.asList("a","b","c")); 
  Set<ArrayList<Character>> subsets3 = getSubsets( Arrays.asList('b','c','d')); 
  System.out.println(subsets); 
  System.out.println(subsets2); 
  System.out.println(subsets3); 
} 
 
//集合接受各種類型數據 
public <T> Set<ArrayList<T>> getSubsets(List<T> subList) { 
  //考慮去重 
  Set<ArrayList<T>> allsubsets = new LinkedHashSet<>(); 
  int max = 1 << subList.size(); 
  for (int loop = 0; loop < max; loop++) { 
    int index = 0; 
    int temp = loop; 
    ArrayList <T> currentCharList = new ArrayList<T>(); 
    //控制索引 
    while (temp > 0) { 
      if ((temp & 1) > 0) { 
        currentCharList.add(subList.get(index)); 
      } 
      temp >>= 1; 
      index++; 
    } 
    allsubsets.add(currentCharList); 
  } 
  return allsubsets; 
} 

方式2:歸納法

   @Test 
public void testName() throws Exception { 
  Set<List<Integer>> subsets2 = getSubsets2(Arrays.asList(1,2,3)); 
  System.out.println(subsets2); 
} 
 
//方式2 歸納法 
//從{}和最后一個元素開始,每次迭代加一個元素組成一個新的集合 
public  Set<List<Integer>> getSubsets2(List<Integer> list) { 
   if (list.isEmpty()) { 
     Set<List<Integer>> ans=new LinkedHashSet<>(); 
     ans.add(Collections.emptyList()); 
     return ans; 
   } 
    
   Integer first=list.get(0); 
   List<Integer> rest=list.subList(1, list.size()); 
   Set<List<Integer>> list1 = getSubsets2(rest); 
   Set<List<Integer>> list2 = insertAll(first, list1);// 
   System.out.println(list1); 
   System.out.println(list2); 
   System.out.println("================"); 
   return concat(list1, list2); 
} 
 
 
   public  Set<List<Integer>> insertAll(Integer first,Set<List<Integer>> lists){ 
  // 
  Set<List<Integer>> result=new LinkedHashSet<>(); 
  for (List<Integer> list : lists) { 
    List<Integer> copy=new ArrayList<>(); 
    copy.add(first); 
    copy.addAll(list); 
    result.add(copy); 
  } 
  return result; 
} 
   
  //這樣寫可以不影響lists1,lists2的值 
  private Set<List<Integer>> concat(Set<List<Integer>> lists1,Set<List<Integer>> lists2) { 
  Set<List<Integer>> temp=new LinkedHashSet<>(lists1); 
  temp.addAll(lists2); 
  return temp; 
} 



關于利用java怎么對集合的子集進行求解問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創新互聯行業資訊頻道了解更多相關知識。

當前標題:利用java怎么對集合的子集進行求解
URL網址:http://m.kartarina.com/article46/pipehg.html

成都網站建設公司_創新互聯,為您提供用戶體驗App設計網站改版手機網站建設虛擬主機面包屑導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

搜索引擎優化
主站蜘蛛池模板: 好了av第四综合无码久久 | 亚洲国产成人精品无码一区二区 | 久久久久亚洲AV无码网站| 亚洲中文久久精品无码ww16| 亚洲精品无码久久毛片波多野吉衣| 精品日韩亚洲AV无码| 日日摸夜夜爽无码毛片精选 | 无码国产精品一区二区免费 | 精品无码国产污污污免费网站| 亚洲av无码有乱码在线观看| 国产成A人亚洲精V品无码性色| 亚洲AV无码一区二区一二区| 中文字幕久久精品无码| 久久久久久久久免费看无码| 无码人妻一区二区三区免费看| 一本大道无码日韩精品影视_| 午夜不卡无码中文字幕影院| 超清无码无卡中文字幕| 色国产色无码色欧美色在线| 无码日韩精品一区二区免费暖暖| 久久久久久国产精品无码下载 | 精品无码一区二区三区亚洲桃色 | 国产精品一区二区久久精品无码| 亚洲中文字幕久久精品无码2021| 国产在线观看无码免费视频| 精品久久久无码中文字幕边打电话| 久久久久亚洲精品无码系列 | AV大片在线无码永久免费| 亚洲中文久久精品无码ww16| 亚洲精品无码专区久久同性男| 人妻丰满熟AV无码区HD| 99精品人妻无码专区在线视频区| 无码少妇一区二区| 色偷偷一区二区无码视频| 无码中文字幕av免费放dvd| 国产午夜无码视频在线观看| 日韩AV高清无码| 亚洲欧洲精品无码AV| 免费一区二区无码东京热| 成年午夜无码av片在线观看| 亚洲日韩激情无码一区|