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

我正在尝试加载超过2 ^ 32个元素的数据集,并将这些元素放在ArrayList anArrayList中.此数据按时间顺序排列,因此我使用ArrayList存储数据以保持顺序.同时,我想快速访问String elementID中的元素.现在我使用HashMap将elementID映射到anArrayList中的元素Object.
我使用整数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));  
}

当我将currentAddingAt的类型从int更改为long时出现问题.因为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之外,我还需要一些库(甚至是某些框架)吗?

解决方法:

Can ArrayList’s capacity larger than the largest int number in Java(2^32)?

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

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

上一篇:Python:大型int键的快速字典


下一篇:java – 从1到100的所有数字均可被整除的最小正数是多少?