我似乎无法找到最大长度为List
最大值的Java long
。
这样的List
是否存在?
若然,在哪里?
答案 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公开)。