一、BitSet學習:
一個Bitset類創建一種特殊類型的數組來保存位值。BitSet中數組大小會隨需要增加。這和位向量(vector of bits)比較類似。這是一個傳統的類,但它在Java 2中被完全重新設計。
二、BitSet存儲方式:
Bitset設計用於Long數組進行位存儲,例如我們Bitset.set(8),那麼存儲的情況爲long數組,最大存儲爲32位,那麼對於8這個數存儲情況爲:00000000000000000000000000001000
並且Bistset不允許存入負數,存入負數直接拋出異常。
三、Bitset的使用:
常規的與或,異或使用:
public static void main(String args[]) {
BitSet bits1 = new BitSet(16);
BitSet bits2 = new BitSet(16);
// set some bits
for(int i=0; i<16; i++) {
if((i%2) == 0) bits1.set(i);
if((i%5) != 0) bits2.set(i);
}
System.out.println("Initial pattern in bits1: ");
System.out.println(bits1);
System.out.println("\nInitial pattern in bits2: ");
System.out.println(bits2);
// AND bits
bits2.and(bits1);
System.out.println("\nbits2 AND bits1: ");
System.out.println(bits2);
// OR bits
bits2.or(bits1);
System.out.println("\nbits2 OR bits1: ");
System.out.println(bits2);
// XOR bits
bits2.xor(bits1);
System.out.println("\nbits2 XOR bits1: ");
System.out.println(bits2);
}
運行結果如下:
我們隨機1~1億的數字一億個,找出沒有出現的數字也可以用該方式實現:
import java.util.*;
public class TestMain {
public static void main(String[] args) {
Random random=new Random();
List<Integer> list=new ArrayList<>();
for(int i=0;i<10000000;i++)
{
int randomResult=random.nextInt(100000000);
list.add(randomResult);
}
System.out.println("產生的隨機數有");
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}
BitSet bitSet=new BitSet(100000000);
for(int i=0;i<10000000;i++)
{
bitSet.set(list.get(i));
}
System.out.println("0~1億不在上述隨機數中有"+bitSet.size());
for (int i = 0; i < 100000000; i++)
{
if(!bitSet.get(i))
{
System.out.println(i);
}
}
}
}