Java获取BitSet交集基数的最快方法

前端之家收集整理的这篇文章主要介绍了Java获取BitSet交集基数的最快方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

下面的函数需要两个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

猜你在找的Java相关文章