我需要一个Java中的ArrayList,它可以有多达一百万个条目(我不会制定规则,我只是实现它们)。 ArrayList在100万之前显然会死得很好(它可能会到达那里,但它会花费很长时间)。 LinkedList不起作用,因为我需要使用get(index)来访问它。
最好的方法是什么?我所想到的最好的是一个两步数组,主阵列的元素指向数组的一个子集。因此每个数组包含1,000个对象,主数组可以指向1,000个这些子数组。
数组不稀疏,按顺序构建。然后大部分按顺序访问。
以下一些问题的更新:
更新2:
对于这种说法,ArrayList应该足够快,我写了一个小的测试例程,一次创建一个百万行数组一个add()。它是(我要挖掘我的代码,看看为什么这看起来像问题,因为它不是)。
LinkedList seconds = 0.136
ArrayList seconds = 0.087
答案 0 :(得分:3)
给定数组A,索引的类型为integer
,这意味着它可以有数百万个条目。因此,使用
O[] o = new O[1000000];
答案 1 :(得分:3)
如果您所做的只是添加元素,按索引访问元素并按顺序迭代元素,为什么ArrayList会出现问题? ArrayList在所有这些操作中都非常有效。
如果您真的在谈论拥有一个比您可以支持的数组大得多的数组,那么您真正谈论的是数据库访问。如果您认为您的数组是一个数据库表,并且每个元素的索引都在整数列中表示,那么这很容易实现。
如果你不关心延迟,你可以在数据库中为该列创建一个索引,然后通过索引列进行选择,这是合理有效的(尽管不如访问内存中的引用那么快) 。如果您关心延迟并且可以预先预测您可能正在访问哪些元素,则可以轻松地使用某种缓存机制来满足您的内存和对象访问要求。
不幸的是,我不知道你的延迟要求是什么,你的问题并没有真正说明你将如何使用这个巨大的阵列,所以这个模糊的asspull是我能做的最好的。