下面的函数需要两个BitSets,复制第一个(它不能被覆盖),将副本与第二个(按位AND)相交并返回结果的基数.
public int getIntersectionSize(BitSet bits1,BitSet bits2) {
BitSet copy = (BitSet) bits1.clone();
copy.and(bits2);
return copy.cardinality();
}
最佳答案
如果您要多次使用每个BitSet,那么创建一个对应于每个BitSet的长数组可能是值得的.对于每个BitSet:
long[] longs = bitset.toLongArray();
然后,您可以使用以下方法,这可以避免创建克隆BitSet的开销. (这假设两个数组的长度相同).
int getIntersectionSize(long[] bits1,long[] bits2) {
int nBits = 0;
for (int i=0; i