簡體   English   中英

Java 數據結構,用於任意大量元素且大於 Integer.MAX_VALUE

[英]Java data structure for an arbitrary large number of elements and larger than Integer.MAX_VALUE

是否有可以存儲任意大量元素的 java 數據結構? 為簡單起見,我們假設元素也是 BigInteger。

從理論上講,使用帶有 BigInteger 索引的數組是可以的,因為設置和獲取值將是唯一需要的操作。 但是數組不能包含超過 Integer.MAX_VALUE。(或者甚至更少,具體取決於 VM,請參閱此問題)。

要實現這樣的數據結構,一個簡單(簡單)的解決方案是從 LinkedList 創建一個並擁有一個外部 BigInteger 計數器。

像這樣的東西:

class MyArray{

   private final BigInteger size;
   private final LinkedList<BigInteger> list;

   MyArray(BigInteger size){
      //ommited for simplicity
   }

   public BigInteger get(BigInteger index){
      //ommited for simplicity
      //traverse the LinkedList using a BigInteger counter and get the element
   }

   public void set(BigInteger index,BigInteger element){
       //ommited for simplicity. 
      //traverse the LinkedList using a BigInteger counter and set the element
   }

   public BigInteger getSize(){
       return size;
   }

}

但是,應該可以進行一些優化。 例如,不初始化尚未設置或獲取的元素,或緩存頻繁請求的元素。 從這個意義上說,Map 實現也可能是一個很好的實現。 然而,地圖返回一個整數大小,我找不到關於 map 是否可以處理超過 Integer.MAX_VALUE 的參考。 我搜索了 TreeMap 和 HashMap。 是否有這樣一個任意大小的數據結構可用?

其他一些約束。 1 - memory 大小不被視為約束,但保存 memory 將是一個加分項。 2 - 數據結構最好存儲在 memory 中,因此不考慮數據庫支持的解決方案。 例如,上述內容也可以通過將值保存在數據庫中來實現,其中元素的索引轉換為字符串並用作字符串鍵。

該問題背后的動機是確定一個簡單的解決方案,而不依賴於 memory 數據庫。 例如,當 64 位數組將是一個很好的解決方案時。 memory 數據庫中的一個提供了更多可能不需要並且可能可以避免的功能。

沒有任何答案,也沒有找到易於實施和高效的解決方案,我會說使用 memory 數據庫是 go 的最簡單方法。 memory 數據庫的列表可以在 Wikipedia 中找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM