【问题标题】:JAVA BitSet settingJAVA BitSet 设置
【发布时间】:2015-07-04 18:51:22
【问题描述】:

我正在使用 Java (JDK 1.8) 进行开发并操作 BitSet。我遇到了 一个奇怪的问题。

我正在实例化一个大小为 160 的 BitSet,例如:

BitSet example = new BitSet(160);

我想使用 size() 方法检查大小,该方法给出了位集中的位数。在文档中,据说以 int N 作为参数的构造函数正在创建 N 位的位集。

但是当我用

检查尺寸之后
example.size()

我得到了价值

192

我不明白为什么,有人遇到过这种问题吗? 文档链接:http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html

【问题讨论】:

  • 来自文档:创建一个位集,其初始大小足够大以显式表示索引范围为 0 到 nbits-1 的位。

标签: java bitset


【解决方案1】:

这是因为BitSet 构造函数在参数给定的范围内创建了一个BitSet“其初始大小足以显式表示”位。所以实际的size 将是至少您在参数中给出的数字,但不一定一定等于那个数字。

它特别使用 192 的原因是 192 是一个相当不错的二进制数:64 * 3。

【讨论】:

  • 好的,我现在看到了,非常感谢!所以我想没有办法创建一个包含构造函数中给出的位数的位集。我将使用一个简单的数组。
  • @thiout_p 为什么需要恰好一定大小的位集?你确定你正在构建的程序的内存限制真的那么严格吗?
  • @RedRobotHood 只是我必须实现一个由大量位组成的模型,我想尽可能地坚持它,但我会做其他事情。感谢您指出文档中的重要单词!
  • @thiout_p 问题是,假设您真的只是在处理一长串位 as 位,使用BitSet 既快速又方便。不使用它的唯一原因是,如果额外的填充位确实为您的目的占用了太多 RAM,我认为这不太可能。
【解决方案2】:

因为BitSet其实是用long[]来存储0/1的。

private void initWords(int nbits) {
    words = new long[wordIndex(nbits-1) + 1];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-01
    • 2012-12-11
    • 1970-01-01
    • 2013-03-01
    • 2014-10-13
    • 2011-04-26
    • 1970-01-01
    相关资源
    最近更新 更多