是否存在比Java List更长的内容?
我似乎无法找到一个Java List
,其最大长度是long
的最大值。
这样的List
是否存在?
如果是这样,在哪里?
正如@afsantos所说,由于Java数组的限制, ArrayList
类本质上仅限于Integer.MAX_VALUE
条目。
LinkedList
没有这个限制,但它(尽管如此)昂贵:
-
每个条目产生2个引用的内存开销加上对象头的大小…与基于数组的表示的一个引用相比。
-
与基于arrays的列表的
O(1)
相比,索引是O(N)
操作。
以下是Java库的链接,该库使用直接映射内存和/或元素编码支持大量内存中集合:
那里可能还有其他选择。
人们还可以设想使用数组数组而不是单个数组的常规数组列表的“大”变体。 但是如果允许插入到列表的中间,则实现O(1)
查找变得困难/昂贵。 (这可能就是为什么我找不到谷歌的例子……)
从List
文档中:
int size()
返回此列表中的元素数。 如果此列表包含多个
Integer.MAX_VALUE
元素,则返回Integer.MAX_VALUE
。
因此,即使List
的特定实现包含Long.MAX_VALUE
元素,您也不会知道使用标准List
接口。
我不确定是否存在,但我的赌注将在LinkedList
,因为ArrayList
基于数组,并且那些不能超过Integer.MAX_VALUE
元素。
由于List.get(int)
接受int作为其参数,因此无法处理索引大于Integer.MAX_VALUE
条目。
但请注意, Iterable>
或Map
可以处理更多数据。 由于List实现了Iterable,它可以包含任意数量的数据(该部分未通过基于int的List的API公开)。