【问题标题】:Creating a BitSet of specific length in java在java中创建特定长度的BitSet
【发布时间】:2016-07-21 12:25:37
【问题描述】:

我有一个函数,我想在其中执行 OR、AND、set 等操作。我首先想到了一个布尔数组,但问题是我不能对它们执行 AND 和 OR 操作(但是我可以将特定元素设置为 true)。我也尝试使用 BiSet,但问题是 BitSet 的最小大小为 64(位)。我希望它存储特定数量的位(例如 15 个),稍后我可以从中迭代以获取它们的包含。在 C# 中,有处理此类问题的 BitArray 类; Java似乎没有这样的。对此问题的任何建议将不胜感激

【问题讨论】:

  • 为什么new BitSet(15) 不能满足您的需求?
  • 所以,真正有趣的问题更像是:是什么让你产生了这种错误的印象?
  • @cdelmas ,我这么说是因为,例如,当我这样做时:BitSet a = new BiSet(15),当我调用 a.length 之后,我得到 64。

标签: java c# bitset


【解决方案1】:

我认为你错了。 java.util.Bitset 允许任意位数;没有“仅 > 64 位”的限制。是的,位集可能在内部使用长值来存储这些位;但它没有说你只能使用 64 位、128 位等。

换句话说:当你设置一个15位的Bitset时,它会分配long[1]; 63 位相同;如果需要 70 位,它将分配 long[2]

长话短说:这门课正是您要找的;而且我认为任何其他实现都不会更有效。

【讨论】:

  • 感谢您的明确解释,我现在清楚了。我还可以创建一个 BiSet 数组吗?如果可以,我该如何遍历它们?
  • 好吧,您可能会从阅读一些有关 Java 的书籍开始。你看,这不是“编程学校”,人们告诉你的东西到处都有记录。但是,好吧;你会去Bitset[] mySets = new BitSet[] { new BitSet(5), new BitSet(6), .. } 。但在 2016 年,您很可能希望使用动态集合,例如 List<BitSet> mySets = new ArrayList<>() ...,然后根据需要添加 BitSet 对象。但如前所述:这确实是您通过学习学到的基本知识;而不是通过在 stackoverflow 上询问人们。
猜你喜欢
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 2023-03-08
  • 2011-11-23
  • 2021-09-17
  • 1970-01-01
相关资源
最近更新 更多