在我的代码中,我试图获取哈希图中是否存在数字。我的代码如下:
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[]
来存储单独的位,因此它在内存方面非常好,但有时可能会有点太慢。