2017-04-08 61 views
1

我想管理最多10^18個項目的布爾狀態(開/關)。在Java中執行此操作的內存和計算效率最高的方式是什麼?我不能創建這樣大的布爾值數組,因爲數組大小的原始類型是int,而BitSet類也是如此。管理大量布爾狀態的最有效方法

E.g:

long numSwitches = Long.MAX_VALUE; 
boolean[] switches = new boolean[numSwitches]; 

給了我一個編譯錯誤:Incompatible types, Reguired: int, Found: long

+0

只能使用int作爲數組大小。如果您需要更多,請創建更多陣列或使用動態數據結構。 – Turing85

+0

http://stackoverflow.com/questions/3040864/java-sparse-bit-vector(假設沒有真正的10^17 trues)可能的副本 – kennytm

+0

10^18是約。 2^60所以確實太多了。內存映射文件可以做到;一個ByteBuffer等等。 –

回答

2

老實說,我不認爲這樣的事情是可能的,而無需使用一臺超級計算機的。 10^18是一個很大的數字,它實際上相當接近單粒鹽中的原子數!如果每個原子是1位,那麼總內存將高達125 PB(125,000 TB)!

即使您希望通過使用某種流來順序訪問一個位(隨機訪問將要求您將它全部加載到內存中),它仍然需要很長的時間。

除非一次只能比較幾個比特的總數(幾十億,這仍然需要千兆字節的內存),但我不覺得有任何可行的方法來解決這個問題。但是,想想還是很有趣的。

相關問題