簡體   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