java.util.BitSet的使用

BitSet顾名思义即Bit的一个集合,每个Bit只能取1或0(True或False),是存储海量数据一个途径。

而实际上BitSet内部核心是一个long的数组.

由于一个long在java中占用8个字节,即64位.

long[] result

result[0]  则可以保存

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

11111111 111111111 111111111 111111111 111111111 111111111 111111111 111111111

package com.zte.sunquan.demo;

import org.junit.Test;

import java.util.BitSet;
import java.util.Random;

/**
 * 有1千万个随机数,随机数的范围在1到1亿之间。
 * 现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来?
 */
public class BitSetTest2 {
    public static final int NUM = 10000000;//10;
    public static final int NUM2 = 10 * NUM;

    @Test
    public void test() {
        int[] input = new int[NUM2 + 1];
        Random random = new Random();
        for (int i = 1; i < NUM + 1; i++) {
            input[random.nextInt(NUM2) + 1] = 1;
        }
        for (int i = 1; i < NUM2 + 1; i++) {
            if (input[i] == 0)
                System.out.println(i);
        }
    }

    @Test
    public void test2() {
        Boolean[] input = new Boolean[NUM2 + 1];
        Random random = new Random();
        for (int i = 1; i < NUM + 1; i++) {
            input[random.nextInt(NUM2) + 1] = true;
        }
        for (int i = 1; i < NUM2 + 1; i++) {
            if (input[i] == false)
                System.out.println(i);
        }
    }

    @Test
    public void test3() {
        BitSet input = new BitSet(NUM2 + 1);
        Random random = new Random();
        for (int i = 0; i < NUM + 1; i++) {
            input.set(random.nextInt(NUM2) + 1);
        }
        int j = 1;
        for (int i = 1; i < NUM2 + 1; i++) {
            if (!input.get(i)) {
                if (j++ % 10 != 0)
                    System.out.print(i + ",");
                else {
                    j = 1;
                    System.out.println(i);
                }
            }
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值