在Java中将大数据集加载到ArrayList(ArrayList的最大容量)

Bin*_*Bin 3 java arraylist biginteger large-data bigdata

我正在尝试加载超过2 ^ 32个元素的数据集,并将这些元素放在ArrayList中anArrayList.此数据按时间顺序排列,因此我使用ArrayList存储数据以保持顺序.同时,我想快速访问String中的元素elementID.现在我使用HashMap将a映射elementID到元素Object中anArrayList.我使用整数currentAddingAt来跟踪anArrayList上的索引以添加元素.这是相关的代码:

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));  
}
Run Code Online (Sandbox Code Playgroud)

当我改变的类型的问题来了currentAddingAt,从intlong.因为ArrayList的get(int index)方法仅int作为参数,根据Oracle的文档(http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html).这也让我想知道:

ArrayList的容量可以大于Java中的最大int数(2 ^ 32)吗?

除了在这种情况下使用ArrayList和HashMap之外还有哪些选项(保持大数据集的顺序并且仍然能够从键快速映射到对象)?除了普通的Java之外,我还需要一些库(甚至是某些框架)吗?

Dav*_*ann 5

ArrayList的容量可以大于Java中的最大int数(2 ^ 32)吗?

不.因为它是阵列支持的,所以它不能大于2 ^ 31-1.Collections如果您希望size()toArray()方法起作用,这适用于所有.

你需要存储列表列表,但我敢打赌,有一个库可以做到这一点.我没有使用它的那一部分,但Fastutil除了原始数据结构外还有大数据结构.