Java中的BitSet類

package com.zhong.demomaven.filter;

import java.util.ArrayList;
import java.util.BitSet;
import java.util.List;
import java.util.Random;

/**
 * BitSet
 * 應用場景:
 * 1,統計一組大數據中沒有出現過的數;
 * 將這組數據映射到BitSet,然後遍歷BitSet,對應位爲0的數表示沒有出現過的數據。
 * 2. 對大數據進行排序;
 * 將數據映射到BitSet,遍歷BitSet得到的就是有序數據。
 * 3. 在內存對大數據進行壓縮存儲等等。
 * 一個GB的內存空間可以存儲85億多個數,可以有效實現數據的壓縮存儲,節省內存空間開銷
 *
 *
 * 題目:有1千萬個隨機數,隨機數的範圍在1到1億之間。
 * 現在要求寫出一種算法,將1到1億之間沒有在隨機數中的數求出來?
 */
public class BitSetTest {

    public static void main(String[] args) {

        Random random = new Random();
        int nums =   10000000 ;
        int maxNum = 100000000;

        List<Integer> list=new ArrayList<>();
        for(int i=0;i< nums;i++)
        {
            int randomResult=random.nextInt(maxNum);
            list.add(randomResult);
        }
        System.out.println("產生的隨機數有");

        for(int i=0;i<list.size();i++)
        {
            System.out.print(list.get(i) + " ");
        }

        BitSet bitSet=new BitSet(maxNum);

        for(int i=0;i< nums;i++)
        {
            bitSet.set(list.get(i)); //將數映射到bitset中,設置list.get(i)位置爲true
        }

        System.out.println();
        int count = 0;
        for (int i = 0; i < maxNum; i++)
        {
            if(!bitSet.get(i))
            {
                count++;
                System.out.print(i + " "); //不在裏面的數
            }
        }
        System.out.println();
        System.out.println("0~1億不在上述隨機數中有"+count+"個");
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章