最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 通過位運算求一個集合的所有子集方法

 更新時間:2017年03月12日 12:51:26   投稿:jingxian  
下面小編就為大家?guī)硪黄狫ava 通過位運算求一個集合的所有子集方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Java沒有自帶的求一個集合的所有子集的方法,我們可以通過集合的子集規(guī)律來求。

一個集合的所有子集等于2^該集合的長度。比如{c,b,a}的長度為3,這個集合的子集就有8個。

這句話看起來很簡單,但同時也隱含著高深的哲理。其實一個集合的所有集合,和2^該集合的長度這個數(shù)字有關。比如上面的例子,{c,b,a}的長度為3,則可以用0-7表示其所有子集。如下所示,改數(shù)字所對應的位置為1,則說明我需要這個數(shù)字形成子集。從0-7的二進制表示,剛好代表完,一個長度為3,子集個數(shù)為8的所有子集。

0(000):{}

1(001):{a}

2(010):

3(011):{ab}

4(100):{c}

5(101):{a,c}

6(110):{b,c}

7(111):{a,b,c}

于是,根據(jù)上面的規(guī)律,代碼可以這樣寫,先取集合長度,求出2^該集合的長度是多少,比如上面的8,然后從0遍歷到8-1。遍歷的時候,對0、1、2……每一個數(shù)據(jù)進行位運算,逐一判斷其對應的位數(shù),也就是二進制表示方式,那一位是1。用匯編那種,將每一位移到最末尾,與1的位與實現(xiàn),具體代碼如下:

import java.util.ArrayList;
public class getSubSet {
 public static ArrayList<ArrayList<Integer>> getSubset(ArrayList<Integer> L) {
		if (L.size() > 0) {
			ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
			for (int i = 0; i < Math.pow(2, L.size()); i++) {// 集合子集個數(shù)=2的該集合長度的乘方
				ArrayList<Integer> subSet = new ArrayList<Integer>();
				int index = i;// 索引從0一直到2的集合長度的乘方-1
				for (int j = 0; j < L.size(); j++) {
					// 通過逐一位移,判斷索引那一位是1,如果是,再添加此項
					if ((index & 1) == 1) {// 位與運算,判斷最后一位是否為1
						subSet.add(L.get(j));
					}
					index >>= 1;// 索引右移一位
				}
				result.add(subSet); // 把子集存儲起來
			}
			return result;
		} else {
			return null;
	}
}

	public static void main(String[] args) {
	ArrayList<Integer> L = new ArrayList<Integer>();
	L.add(1);
	L.add(2);
	L.add(3);
	System.out.println(getSubset(L));
	}

}

運行結果如下:

以上這篇Java 通過位運算求一個集合的所有子集方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 詳解租約機制以及在hbase中的應用

    詳解租約機制以及在hbase中的應用

    這篇文章主要介紹了詳解租約機制以及在hbase中的應用的相關資料,需要的朋友可以參考下
    2017-02-02
  • Java各種比較對象的方式的對比總結

    Java各種比較對象的方式的對比總結

    比較對象是面向對象編程語言的一個基本特征.在本教程中,我們將介紹Java語言的一些特性,這些特性允許我們比較對象.此外,我們還將研究外部庫中的這些特性,需要的朋友可以參考下
    2021-06-06
  • 對比Java講解Kotlin中?.與!!.的區(qū)別

    對比Java講解Kotlin中?.與!!.的區(qū)別

    這篇文章主要給大家介紹了關于對比Java,實例講解Kotlin中?.與!!.的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家學習或者使用kotlin具有一定參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06
  • Spring Boot兩種配置文件properties和yml區(qū)別

    Spring Boot兩種配置文件properties和yml區(qū)別

    這篇文章主要為大家介紹了java面試中常見問到的Spring Boot兩種配置文件properties和yml區(qū)別解答,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java中ArrayList在foreach里remove的問題詳析

    Java中ArrayList在foreach里remove的問題詳析

    這篇文章主要給大家介紹了關于Java中ArrayList在foreach里remove問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧
    2018-09-09
  • mybatis判斷l(xiāng)ist不為空/大小的問題

    mybatis判斷l(xiāng)ist不為空/大小的問題

    這篇文章主要介紹了mybatis判斷l(xiāng)ist不為空/大小的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 關于mybatis遇到Integer類型的參數(shù)時動態(tài)sql需要注意條件

    關于mybatis遇到Integer類型的參數(shù)時動態(tài)sql需要注意條件

    這篇文章主要介紹了關于mybatis遇到Integer類型的參數(shù)時動態(tài)sql需要注意條件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 關于Spring Bean實例過程中使用反射和遞歸處理的Bean屬性填充問題

    關于Spring Bean實例過程中使用反射和遞歸處理的Bean屬性填充問題

    本文帶領大家一起學習下在Spring Bean實例過程中如何使用反射和遞歸處理的Bean屬性填充,需要在類 AbstractAutowireCapableBeanFactory 的 createBean 方法中添加補全屬性方法,具體操作方法跟隨小編一起學習下吧
    2021-06-06
  • java  異常詳解及應用實例

    java 異常詳解及應用實例

    這篇文章主要介紹了java 異常詳解及應用實例的相關資料,需要的朋友可以參考下
    2017-01-01
  • 基于springboot+jwt實現(xiàn)刷新token過程解析

    基于springboot+jwt實現(xiàn)刷新token過程解析

    這篇文章主要介紹了基于springboot+jwt實現(xiàn)刷新token過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03

最新評論

舒兰市| 鹤庆县| 稷山县| 长沙市| 郑州市| 苍溪县| 滨海县| 湘乡市| 平安县| 略阳县| 且末县| 南投市| 万源市| 金山区| 东丽区| 平乡县| 延安市| 兴义市| 滁州市| 米脂县| 黎城县| 浪卡子县| 汤阴县| 丰县| 惠州市| 门源| 于都县| 道孚县| 山阳县| 同江市| 青阳县| 望谟县| 青州市| 富平县| 阜阳市| 安图县| 长顺县| 尚义县| 巴林左旗| 满城县| 长垣县|