在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.
标签:large-data,java,arraylist,bigdata,biginteger 来源: https://codeday.me/bug/20190831/1773672.html