zoukankan      html  css  js  c++  java
  • java bitSet

     bitSet对那种海量无符号的整数,去重,统计,判断元素是否存在之类的比较高效。bitSet不需要存储元素本身

    但是面对其他情况,比如处理url,则需要使用哈希函数将URL处理为1bit,存储在BitSet中。但是,哈希函数发生冲突的概率比较高,若要降低冲突概率到1%,就要将BitSet的长度设置为URL个数的100倍。

    package cn.kong.test;
    
    
    import java.util.BitSet;
    /**
     * BitSet类实现了一个按需增长的位向量。位Set的每一个组件都有一个boolean值。
     * 用非负的整数将BitSet的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。
     * 默认情况下,bitSet中所有位的初始值都是false。
     */
    public class BitSetTest {
    
        public static void main(String[] args) {
            int[] array = new int[]{1,2,3,16,0,3,61};
    //        BitSet的底层实现是使用long数组作为内部存储结构的,所以BitSet的大小为long类型大小(64位)的整数倍。
    //        BitSet有两个构造函数:
    //        1、BitSet():创建一个bitSet,默认容量大小是64位。
    //        2、BitSet(int nbits):创建一个bitSet,它的初始大小表示索引(index)范围在0到nbits-1的位。
            BitSet bitSet = new BitSet();
            System.out.println(bitSet.size());//64
            BitSet bitSet1 = new BitSet(1);//index范围0-1,使用1个bit位,也是要分配一个long类型,64位的空间
            System.out.println(bitSet1.size());//64
            BitSet bitSet2 = new BitSet(65);//index范围0-65,1个long表示不了,所以要分配2个long,也就是128位
            System.out.println(bitSet2.size());//128
            BitSet bitSet3 = new BitSet(23);//index范围0-23,1个long可以表示,分配一个即可,所以64位
            System.out.println(bitSet3.size());//64
    
            for (int i = 0; i < bitSet3.size(); i++) {
                System.out.println(bitSet3.get(i));//在没有赋值之前,所有位的初始值都是false
            }
    
            //赋值测试
            for (int value : array) {
                //bitSet的index0-63位表示值0-63
                //不能赋负值
                //赋值以后将位对应的值设置为true
                bitSet1.set(value, true);
            }
            System.out.println(bitSet1.get(4));//false
            System.out.println(bitSet1.get(16));//true
            System.out.println(bitSet1.get(61));//true
    
            System.out.println("遍历bitSet1");
            for (int i = 0; i < bitSet1.size(); i++) {
                System.out.println(bitSet1.get(i));
            }
        }
    }
    遍历bitSet1
    true
    true
    true
    true
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    true
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    false
    true
    false
    false
  • 相关阅读:
    P3704 [SDOI2017]数字表格
    CF 700 E. Cool Slogans
    杜教筛学习笔记
    [BOI2004]Sequence 数字序列(左偏树)
    [WC2007]剪刀石头布(最大流)
    [NOI2009]变换序列(二分图匹配)
    文理分科(最小割)
    上帝与集合的正确用法(欧拉定理)
    [HAOI2008]圆上的整点(数论)
    主席树学习笔记
  • 原文地址:https://www.cnblogs.com/zz-ksw/p/12170089.html
Copyright © 2011-2022 走看看