Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-位集替换_Java - Fatal编程技术网

Java-位集替换

Java-位集替换,java,Java,在我的代码中,我试图获取hashmap中是否存在一个数字。我的代码如下: 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进行尝试也会更慢。有谁能帮我用一个更快的操作替换这个

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

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进行尝试也会更慢。有谁能帮我用一个更快的操作替换这个操作。

你的代码很难读清楚,但我怀疑你只是想在位集中设置一些位,这些位是HashMap中的键

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

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

即使这不是你的意思,作为一般规则,比特集的速度也很快;我怀疑是您的其他代码太慢了。

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

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


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

您能给我们展示一下您的实际代码吗。。。或者至少,不是这个伪代码,-1只提供伪代码。你为什么不发布Java代码?@home,我的代码要长得多,提取所需的代码需要时间:但是你可以提供一个编译的示例…@arpsss:Eh?您在问题中提供的代码甚至没有编译。if number exist不是有效的Java语法。但我有bits.setk、true/bits.setk、false是的,我注意到了。这就是问题所在。你应该给我们实际的代码,而不是伪代码。在任何情况下,都没有理由将位设置为false,也不应该从1到1000万进行迭代;您应该只在HashMap的键集上进行迭代。+1到位集的速度非常快;我怀疑是您的代码的其余部分太慢了。同意,为什么要迭代呢。位自身中每一位的默认值都是false,除非显式将其设置为true。因此,迭代映射键是打开需要打开的位的最有效的方法。