是否存在比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条目。

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