我需要一个BitSet,它可以轻松地将多个BitSet连接起来创建一个新的BitSet。 默认实现没有这样的方法。
您是否知道外部库中是否有这样的实现,可以轻松地进行连接?
例如,假设我有一个位数组11111和另一个位数组010101。 我想要添加功能。 因此,在连接后,结果将为11111010101。
我需要一个BitSet,它可以轻松地将多个BitSet连接起来创建一个新的BitSet。 默认实现没有这样的方法。
您是否知道外部库中是否有这样的实现,可以轻松地进行连接?
例如,假设我有一个位数组11111和另一个位数组010101。 我想要添加功能。 因此,在连接后,结果将为11111010101。
这种高效的实现方式(既要考虑性能,又要考虑内存)是不可能的,因为没有左移方法。
你可以使用明显的nextSetBit
循环,虽然慢但内存利用率高。
更快的方法是在一个位集上使用toLongArray
方法,将其正确移位到足够大的数组中,创建一个位集并与另一个位集进行或运算。这样,你不会对单个位进行任何位移操作,而是处理字长大小的块。
这对我有用:
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;
}
010101
中的一个前导零,而忽略无限多的其他前导零呢? - user207421