繁体   English   中英

Java-替换位集

[英]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)

之后,从位集中获得数字i是否存在。 但是,我发现此位集操作相当慢(也尝试使用string = string + 0/1 ,更慢)。 有人可以帮助我如何以更快的速度替换此操作。

您的代码确实很难清晰阅读,但是我怀疑您只是在尝试设置BitSet中的位,这些BitSetHashMap键?

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

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

即使这不是您的意思,但一般而言, BitSet的速度很快。 我怀疑是其余的代码很慢。

如果您提供了实际的相关代码,那么我们可能首先发现了一些性能错误。 但是,假设您的代码还可以,并且您对应用程序进行了配置,以确保BitSet操作实际上很慢:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM