是否有比Java List更长的内容?

时间:2014-01-27 02:03:14

标签: java arraylist long-integer maxlength

我似乎无法找到最大长度为List最大值的Java long

这样的List是否存在?

若然,在哪里?

3 个答案:

答案 0 :(得分:6)

正如@afsantos所说,由于Java数组的局限性,ArrayList类本身仅限于Integer.MAX_VALUE个条目。

LinkedList没有这个限制,但它(但仍然)昂贵:

  • 每个条目都会产生2个引用的内存开销加上对象标题的大小...与基于数组的表示的一个引用相比。

  • 与基于数组的列表的O(N)相比,索引是O(1)操作。

这是Java库的链接,它使用直接映射内存和/或元素编码来支持巨大的内存集合:

可能还有其他选择。

人们还可以设想使用数组数组而不是单个数组的常规数组列表的“大”变体。但是如果允许插入到列表的中间,则实现O(1)查找变得困难/昂贵。 (这可能就是为什么我找不到谷歌的例子......)

答案 1 :(得分:5)

来自List文档:

  

int size()

     

返回此列表中的元素数。如果此列表包含多个Integer.MAX_VALUE元素,则返回Integer.MAX_VALUE

因此,即使List的特定实现包含Long.MAX_VALUE个元素,您也不会知道,使用标准List接口。

我不确定是否存在,但我的赌注是LinkedList,因为ArrayList基于数组,而且不能超过Integer.MAX_VALUE个元素。

答案 2 :(得分:3)

由于List.get(int)接受int作为其参数,因此无法处理索引大于Integer.MAX_VALUE的条目。

但请注意,Iterable<?>Map<Long, ?>可以处理更多数据。由于List实现了Iterable,它可以包含任意数量的数据(该部分未通过基于int的List的API公开)。