Java.util包下BitSet的用法

    BitSet:是一个字节集合,用它可以表示整数和进行求两个集合的交集、并集等运算。

    我们知道,计算机存储的最小单位是比特bit,而我们在java程序中的最小单位是字节Byte,他们之间的换算关系是1Byte=8bit。BitSet是根据比特所在的位置表示整形数据大小。例如:16在第16个位置,5在第5个位置,因此下面的BitSet可以表示集合{5,16}

    

    

    通过分析BitSet的源代码,我们知道,BitSet提供两个构造函数,一个是BitSet(),不带参数,一个是BitSet(int nbits);如果我们使用不带参数的构造函数创建BitSet对象,则创建一个默认长度为64比特bit的对象,这个对象可以表示的数据大小就是1~64,不过即使我们放入大于64的数据也没有关系,因为BitSet是自增长的,最大值可以是Integer.MAX_VALUE=2147483647。

    知道了表示方法,对它的作用就不难理解了,比方说上面的集合与{2,23,48}求并集:则变成了比特码的或运算。

00000000 00000000 00000000 00000000 00000000 00000000 10000000 00100000    集合{5,16}

00000000 00000000 10000000 00000000 00000000 01000000 00000000 00000010    集合{2,23,48}

或运算后的结果就是

00000000 00000000 10000000 00000000 00000000 01000000 10000000 00100010,所以结果就是{2,5,16,23,48}

其它更大的数字无非就是比特码更长。

注意:

如果创建创建一个最大位数的BitSet集合BitSet bitSet = new BitSet(Integer.MAX_VALUE);

         会报如下错误

         Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

   at java.util.BitSet.initWords(BitSet.java:144)

   at java.util.BitSet.<init>(BitSet.java:139)

   at Test.main(Test.java:10)

         这说明,java 堆heap内存不足,可以通过如下方式更改:

   

    其它报java.lang.OutOfMemoryError: Java heap space错误的时候也可以这样更改

转载于:https://my.oschina.net/wuxiaohe/blog/710794

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java.util.BitSetJava中的一个类,它实现了一个位向量,可以用来表示一组位值。它提供了一系列方法来操作位集合,比如设置位、清除位、翻转位等等。\[1\]在引用\[1\]的示例代码中,展示了如何使用BitSet类来进行位操作。首先创建了两个BitSet对象bits1和bits2,然后通过set方法设置了一些位的值。接下来,展示了如何使用AND、OR和XOR操作来对位集合进行逻辑运算。\[1\] 在引用\[2\]中的示例代码中,展示了如何使用BitSet类来判断一个字符串中的哪些字符出现过。通过遍历字符串的每个字符,使用set方法将对应的位设置为true。然后通过toString方法将出现过的字符以字符串的形式返回。\[2\] 在引用\[3\]中的代码片段中,展示了BitSet类的set方法的源码。该方法用于将指定索引处的位设置为true。\[3\] #### 引用[.reference_title] - *1* [JAVA Bitset类](https://blog.csdn.net/m0_37062111/article/details/128724495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [java.util.BitSet](https://blog.csdn.net/zengxiantao1994/article/details/76514490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [java.util.BitSet 分析 ](https://blog.csdn.net/lgshendy/article/details/84725100)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值