Java的BitSet允许轻松拼接BitSets。

10

我需要一个BitSet,它可以轻松地将多个BitSet连接起来创建一个新的BitSet。 默认实现没有这样的方法。

您是否知道外部库中是否有这样的实现,可以轻松地进行连接?

例如,假设我有一个位数组11111和另一个位数组010101。 我想要添加功能。 因此,在连接后,结果将为11111010101。


2
由于BitSet没有有意义的大小或长度(除了最高位设置),因此很难理解您在连接方面的意思。 - jarnbjo
@jarnbjo 我编辑了问题。希望现在可以理解了。 - Can't Tell
2
这不是“连接”。这是左移和按位或运算。我怀疑你能否提出一个连贯的定义来解释你所谓的“连接”版本。例如,为什么在你的例子中观察010101中的一个前导零,而忽略无限多的其他前导零呢? - user207421
@EJP 我知道给定位串的大小。 - Can't Tell
@Can'tTell 不,你不需要。一旦它进入BitSet中,就没有前导零了。 - user207421
2个回答

5

这种高效的实现方式(既要考虑性能,又要考虑内存)是不可能的,因为没有左移方法。

你可以使用明显的nextSetBit循环,虽然慢但内存利用率高。

更快的方法是在一个位集上使用toLongArray方法,将其正确移位到足够大的数组中,创建一个位集并与另一个位集进行或运算。这样,你不会对单个位进行任何位移操作,而是处理字长大小的块。


1
这对我有用:

这对我有用:

BitSet concatenate_vectors(BitSet vector_1_in, BitSet vector_2_in) {
  BitSet vector_1_in_clone = (BitSet)vector_1_in.clone();
  BitSet vector_2_in_clone = (BitSet)vector_2_in.clone();
  int n = 5;//_desired length of the first (leading) vector
  int index = -1;
  while (index < (vector_2_in_clone.length() - 1)) {
    index = vector_2_in_clone.nextSetBit((index + 1));
    vector_1_in_clone.set((index + n));
  }
  return vector_1_in_clone;
}

结果:11111010101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接