BitSet:是一個位元組集合,用它可以表示整數和進行求兩個集合的交集、並集等運算。
我們知道,電腦儲存的最小單位是位元bit,而我們在java程式中的最小單位是位元組Byte,他們之間的換算關係是1Byte=8bit。 BitSet是根據位元所在的位置表示整形資料大小。例如:16在第16個位置,5在第5個位置,因此下面的BitSet可以表示集合{5,16}
透過分析BitSet的來源程式碼,我們知道,BitSet提供兩個構造函數,一個是BitSet(),不帶參數,一個是BitSet(int nbits);如果我們使用不帶參數的構造函數來建立BitSet對象,則建立一個預設長度為64位元bit的對象,這個對象可以表示的資料大小就是1~64,不過即使我們放入大於64的資料也沒有關係,因為BitSet是自增長的,最大值可以是Integer.MAX_VALUE=2147483647。
知道了表示方法,對它的作用就不難理解了,比方說上面的集合與{2,23,48}求並集:則變成了比特碼的或運算。
00000000 00000000 00000000 00000000 00000000 00000000 10000000 00100000 0000000 10000000006 0000 00000000 00000000 01000000 00000000 00000010 集合{2,23,48}
或運算後的結果就是
00000000 01000000 10000000 00100010,所以結果就是{2,5,16,23,48} 其它更大的數字無非就是比特碼更長。注意:
如果建立一個最大位數的BitSet集合BitSet bitSet = new BitSet(Integer.MAX_VALUE);
會報如下錯誤 :Exception in thlang "O會回報heap space
at java.util.BitSet.initWords(BitSet.java:144)
at java.util.BitSet.
(BitSet.java:139)
其它報java.lang.OutOfMemoryError: Java heap space錯誤的時候也可以這樣更改