Java - BitSet Replacement



在我的代码中,我试图获取哈希图中是否存在数字。我的代码如下:

BitSet arp = new BitSet();
for i = 0 to 10 million
HashMap.get (i)
if number exist
arp.set(i , true)
else
arp.set(i , false)

之后,从位集我得到我是否存在的数字。但是,我发现这个位集操作非常慢(也尝试过string = string + 0/1,更慢)。任何人都可以帮助我如何用更快的操作替换此操作。

你的代码真的很难读清楚,但我怀疑你只是想在BitSet中设置一些来自你HashMap键的位?

在这种情况下,您的代码应该或多或少

BitSet bits = new BitSet(10000000);
for (Integer k : map.keySet()) {
  bits.set(k);
}

即使这不是你的意思,作为一般规则,BitSet也非常快;我怀疑是你的其余代码很慢。

如果您提供了实际的相关代码,我们可能会首先发现一些性能错误。但是,假设您的代码正常,并且您分析了应用程序以确保BitSet操作实际上很慢:

如果您有足够的可用内存空间,您可以随时选择boolean[]而不是BitSet

BitSet内部使用 long[] 来存储单独的位,因此它在内存方面非常好,但有时可能会有点太慢。

最新更新