我試圖加載超過2^32個元素的數據集,並把這些元素在一個ArrayList anArrayList
到ArrayList中。此數據按時間順序排列,因此我使用ArrayList來存儲數據以保持順序。同時,我想快速訪問String elementID
中的元素。現在我使用HashMap將elementID
映射到anArrayList
中的元素Object。 我用一個整數currentAddingAt
來跟蹤anArrayList上的索引來添加元素。下面是相關的代碼:加載大數據集的Java(ArrayList中的最大容量)
ArrayList<ElementX> anArrayList;
int currentAddingAt;
HashMap<String, ElementX> elementToObjHashMap;
... ...
public void addAnElement(ElementX e){
anArrayList.add(currentAddingAt, e);
elementToObjHashMap.put(e.getElementID, ArrayList.get(currentAddingAt));
}
當我改變的currentAddingAt
類型從int
到long
的問題就來了。根據Oracle的文檔(http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html),ArrayList的get(int index)
方法僅以int
作爲參數。這也讓我疑惑:
能ArrayList中的能力比在Java中(2^32)最大INT編號更大?
有什麼選擇比在這種情況下使用的ArrayList和HashMap(保持一個大型數據集的順序,仍然有能力擺脫一鍵快速對象映射)其他?我需要一些庫(甚至是一些框架),然後是普通的Java嗎?
您可以切換到一個LinkedList實現克服的ArrayList Integer.MAX_VALUE的尺寸問題,但有可能是,而不是一種更好的方式加載整個數據在內存中。 – gipinani
此鏈接可能會給你一些想法 - [鏈接](http://stackoverflow.com/questions/15630998/how-to-make-a-big-array-in-java) – jacquard
什麼其他的策略有什麼建議,我可以使用?使用這些數據的方式是:讀取和寫入大部分這些元素中的信息以實時動態計算信息。某種數據庫是否會提供元素中數據快速獲取和修改的速度?謝謝。 – Bin