BitSet(位图)的简单介绍和使用

一、简单介绍

       BitSet顾名思义,就是用位来存储数据,即存储0/1,0/1就可以作为标志位,巧妙的利用0/1就可以解决很多不同的问题。BitSet一般用于处理海量数据,可以大大的节省空间,比如有0~99共一百个数,用int来存储,就要用32*100bit,而用BitSet来存储,只利用100bit即可,当数据量达到千万,亿级别时,BitSet的优势更明显。

JDK API:

        BitSet类实现了一个按需增长的位向量。位Set的每一个组件都有一个boolean值。用非负的整数将BitSet的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet修改另一个 BitSet的内容。 

二、使用

(1)BitSet位于java.util这个包中,使用时需导入java.util.BitSet

(2)两个构造函数:

BitSet bs = new BitSet();  //默认大小64位
BitSet bs = new BitSet(n);  //一个n位大小的set

(3)常用的方法:

           

boolean get(int index)               返回索引index处的位值
void set(int index)                     将索引index处的位设置为 true。
void clear(int index)                  将索引index处的位值设置位false
int length( )                               返回BitSet的大小,最高索引加1
void clear( )                              将此 BitSet 中的所有位设置为 false。

(4)实例(剑指offer.数组中重复的数字):

JZ50:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

 public boolean duplicate(int numbers[],int length,int [] duplication) {
        BitSet bs = new BitSet(length);
        for(int j = 0;j < length;j++)
        {
            if(bs.get(numbers[j]) == true)
            {
                duplication[0] = numbers[j];
                return true;
            }
            else
            {
                bs.set(numbers[j],true);
            }
        }
        return false;
    
    }

关于BitSet详细原理:

https://www.jianshu.com/p/e530baada558

关于BitSet更详细的方法:

https://www.runoob.com/java/java-bitset-class.html

展开阅读全文

Windows版YOLOv4目标检测实战:训练自己的数据集

04-26
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值