在Java中,将两个位集相交为一个新位集的最快方法是什么?

在Java中,将两个位集相交为一个新位集的最快方法是什么?,java,performance,bitset,set-intersection,Java,Performance,Bitset,Set Intersection,还有比这更快的时间吗: // say we alread have BitSet bs1 and bs2 BitSet bs3 = (BitSet) bs1.clone(); bs3.and(bs2); 可能转换为整数并添加为数字,然后再转换回位集?我能想到的唯一选择是 Bitset newBitset = new Bitset(bs1.size()); newBitset.or(bs1).and(bs2); 你需要对两者进行计时,看看哪一个更快;我的选择可能会稍微快一点,因为您没有调用覆盖

还有比这更快的时间吗:

// say we alread have BitSet bs1 and bs2
BitSet bs3 = (BitSet) bs1.clone();
bs3.and(bs2);

可能转换为整数并添加为数字,然后再转换回位集?

我能想到的唯一选择是

Bitset newBitset = new Bitset(bs1.size());
newBitset.or(bs1).and(bs2);

你需要对两者进行计时,看看哪一个更快;我的选择可能会稍微快一点,因为您没有调用覆盖方法,也没有进行任何强制转换。

我能想到的唯一选择是

Bitset newBitset = new Bitset(bs1.size());
newBitset.or(bs1).and(bs2);


你需要对两者进行计时,看看哪一个更快;我的备选方案可能会稍微快一点,因为您没有调用覆盖方法,也没有进行任何强制转换。

如果您真的需要速度,我猜几乎没有任何位集可以像整数上的按位操作一样快-&,|,等等。当然,在位集对象中,对按位处理的整数的操作并不多;如果你真的需要速度,我猜几乎没有什么比特集能像对整数的逐位运算一样快-&,|,等等。当然,你在比特集对象中对逐位处理的整数的运算并不多;当你决定以最快的速度运行时,你会放弃它。

你的东西有什么问题?没什么问题,只是第一次使用这个类,也许会有更快的东西?如果你是说代码更短,没有,没有更短的东西。我指的是时间更快。你的东西有什么问题?没什么问题,只是第一次使用这个类,可能会有更快的东西?如果你是指更短的代码,不,没有更短的东西。我是指更快的时间。我必须注意,我不希望向下转换(这只是运行时的类型检查)非常严格,我希望编译器(任何一个)在内联
clone
之后完全优化它。我同意;此外,调用重写方法并不昂贵,而且可能会被编译器优化,我希望看到一个基准测试。此外,如果JIT编译器一点一点地产生相同的机器代码,我也不会感到惊讶。即使在这两种情况下产生的容量也是一样的。我会在下班后对其进行基准测试,除非Sophie Sperner在meNice之前这样做,谢谢,当我完成代码时,我会尝试您的方法并对其进行基准测试。不过,这不会太早,过一段时间:)我必须注意,我不希望下推(这仅仅是运行时的类型检查)很有说服力,我希望编译器(无论是哪一个)在内联
克隆
之后完全优化它。我同意;此外,调用重写方法并不昂贵,而且可能会被编译器优化,我希望看到一个基准测试。此外,如果JIT编译器一点一点地产生相同的机器代码,我也不会感到惊讶。即使在这两种情况下产生的容量也是一样的。我会在下班后对其进行基准测试,除非Sophie Sperner在meNice之前这样做,谢谢,当我完成代码时,我会尝试您的方法并对其进行基准测试。但不会太早,但要过一段时间:)