zoukankan      html  css  js  c++  java
  • Java Bitset

    Bitset创建一种特殊的数组来保存非负整数的值

    取值为true和false,初始都是false。Bitset初始化是一个long,65位,增加位数的话只能是64的整数倍。

    如果用一个Bitset存储一组数组【2,4,6,8】,将会是这样的:

    找出最大值8,给其加1=9

    声明一个Bitset bs[9]

    bs[9]=[0,0,1,0,1,0,1,0,1]//数组从第0位到第8位分别代表的是0,1,2,3,4,5,6,7,8,所以bs数组里为1 的就代表有值,为0的就代表没有值

    0是false,1是true。

    查看BitSet初始化值的代码

    package study.stage1;
    import java.util.BitSet;

    /**
    * Created by Sandy.Liu on 2017/7/11.
    */
    public class BitsetTest {
    public static void main(String[] args){
    BitSet bs1 = new BitSet();
    System.out.println("is bs1 empty: "+bs1.isEmpty()+ " bs1.size: "+bs1.size());
    bs1.set(1);
    System.out.println("is bs1 empty: "+bs1.isEmpty()+ " bs1.size: "+bs1.size());
    bs1.set(65);
    System.out.println("is bs1 empty: "+bs1.isEmpty()+ " bs1.size: "+bs1.size());

    }
    }

    运行结果

    is bs1 empty: true bs1.size: 64
    is bs1 empty: false bs1.size: 64
    is bs1 empty: false bs1.size: 128

    实例2:void and (BitSet set)

    package study.stage1;
    import java.util.BitSet;

    /**
    * Created by Sandy.Liu on 2017/7/11.
    */
    public class BitSetTest1 {
    public static void main(String[] args){
    //初始化两个Bitset
    BitSet bs1 = new BitSet();
    BitSet bs2 = new BitSet();
    //给两个bitset赋值
    for(int i = 0;i<30;i++){
    if(i%2==0){
    bs1.set(i);
    }
    if(i%5==0){
    bs2.set(i);
    }
    }
    System.out.println("bs1: "+bs1);
    System.out.println("bs2: "+bs2);

    //bs1 and bs2,值存储在bs1中
    bs1.and(bs2);
    System.out.println("bs1 and bs2: "+bs1);

    }
    }
    运行结果:

    bs1: {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28}
    bs2: {0, 5, 10, 15, 20, 25}
    bs1 and bs2: {0, 10, 20}

    分析:

    bs1[10101010101010101010101010101]

    bs2[100001000010000000001]

    所以bs1 and bs2后的值为:【100000000010000000001】,所以就是{0,10,20}

    存储的时候会对重复的数字过滤,重复的数字只记一次。

    BitSet中实现了Cloneable中的方法如下:

    1. void and(BitSet set) 对此目标位和参数位set执行逻辑与操作

    2. void andNot(BitSet bet) :

    bs1.andNot(bs2)  清除bs1当中存在于bs2中的位。

    bs2: {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28}
    bs1: {0, 5, 10, 15, 20, 25}

    bs1.andNot(bs2): {5,15,25}

    3. int cardinality() 返回此BitSet中设置我true的位数

    bs1: {0, 5, 10, 15, 20, 25}

    bs1.cardinality(): 6

    4. void clear() 将所有的位设置为false

    5 void clear(int index) 将索引指定的位设置为false

    6. void clear(int startIndex, int endIndex) 将startIndex(包括)到endIndex(不包括)之间的位设置为false

    7. object clone()复制此BitSet,生成一个相等的新的BitSet。需要注意的是新的BitSet是object类型,赋值给BitSet类型需要强制类型转换

    bs1: {0, 5, 10, 15, 20, 25}

    bs2

    bs2 = (BitSet)bs1.clone();

    8. boolean equals(object Bitset) 与指定的对象进行比较

    9. boolean getIndex(int index) 返回指定位置处的位值

    bs1.getIndex(5): true

    10.  BitSet get(int startIndex, int endIndex)
    返回一个新的 BitSet,它由此 BitSet 中从 fromIndex(包括)到 toIndex(不包括)范围内的位组成。

    11. int hashCode( )
    返回此位 set 的哈希码值。

    12. boolean isEmpty( )
    如果此 BitSet 中没有包含任何设置为 true 的位,则返回 ture。

    13. int length( )
    返回此 BitSet 的"逻辑大小":BitSet 中最高设置位的索引加 1。

    bs1: {0, 5, 10, 15, 20, 25}

    bs2.length(): 26

    14. int size( )
    返回此 BitSet 表示位值时实际使用空间的位数。

    bs1: {0, 5, 10, 15, 20, 25}

    bs2.size(): 64

  • 相关阅读:
    javascript常用函数封装——运动、cookie、ajax、获取行内样式兼容写法、拖拽
    Git——如何将本地项目提交至远程仓库
    cookie——登录注册极简版
    jsonp实现下拉搜索
    Ajax——从服务器获取各种文件
    机器学习(一)理论
    机器学习(二)数据处理&相似/异性度量
    【汇总】机器学习基础之「统计篇」思维导图
    code备忘
    sentinel备忘
  • 原文地址:https://www.cnblogs.com/xiaohai2003ly/p/7151880.html
Copyright © 2011-2022 走看看