-1

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

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)

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

4

2 回答 2

3

你的代码真的很难读清楚,但我怀疑你只是想在BitSet你的HashMap?

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

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

即使这不是您的意思,但一般来说,BitSet它的速度很快;我怀疑这是你的代码的其余部分很慢。

于 2012-07-03T15:52:43.740 回答
2

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

如果你有足够的可用内存空间,你总是可以选择 aboolean[]而不是 a BitSet

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

于 2012-07-03T15:59:49.857 回答