java-列表最多可以容纳多少数据?

最多可以在Java的java.util.List中添加多少数据?

ArrayList是否有默认大小?

Paul asked 2020-01-10T09:22:20Z

8个解决方案

50 votes

这取决于List的实现。 由于您使用ints为数组建立索引,因此ArrayList不能容纳Integer.MAX_VALUE个以上的元素。 但是,LinkedList并不仅限于此,它可以包含任意数量的元素。

gustafc answered 2020-01-10T09:22:42Z

22 votes

这将取决于实现,但是该限制不是由ArrayList接口定义的。

但是,该接口定义了ArrayList方法,该方法返回Integer.MAX_VALUE。

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

因此,没有限制,但是当您达到ArrayList之后,列表的行为会有所变化

ArrayList(已标记)由阵列支持,并且受限于阵列的大小-即Integer.MAX_VALUE

Bozho answered 2020-01-10T09:23:20Z

12 votes

最多可以在Java的java.util.List中添加多少数据?

这与可以存储在HashMap中的键(对象)数量的理论限制非常相似。

ArrayList的文档未明确记录对元素最大数量的任何限制。 但是ArrayList的文档指出...

返回一个包含此列表中所有元素的数组,并按适当的顺序排列(从第一个元素到最后一个元素);    如实地实施某些方法会遇到麻烦,例如

...因此严格来说,如果列表中包含的元素超过231-1 = 2147483647个元素,则无法忠实地实现此方法,因为这是最大的数组。

有人会说ArrayList ...

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

...表示没有上限,但是这种观点导致了许多不一致之处。 请参阅此错误报告。

数组列表有默认大小吗?

如果您指的是ArrayList,那么我会说默认大小为0。但是,默认容量(可以插入元素的数量,而不必强制列表重新分配内存)为10。请参阅默认构造函数的文档。 。

由于具有普通阵列的支持,因此ArrayList的大小限制为Integer.MAX_VALUE。

aioobe answered 2020-01-10T09:24:26Z

9 votes

Integer.MAX_VALUE是一个接口。 列表可以容纳多少数据取决于您选择使用列表的特定实现。

通常,列表实现可以容纳任意数量的项目(如果使用索引列表,则可能限于Integer.MAX_VALUE或Long.MAX_VALUE)。 只要您不用完内存,列表就不会变得“满”或任何东西。

Gerco Dries answered 2020-01-10T09:24:51Z

5 votes

尽可能多的可用内存。 除堆外,没有大小限制。

duffymo answered 2020-01-10T09:25:11Z

2 votes

但是,接口定义了size()方法,该方法返回一个int值。

Returns the number of elements in this list. If this list contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.

因此,没有限制,但是在达到Integer.MAX_VALUE之后,列表的行为会有所变化

ArrayList(已标记)由数组支持,并且受限于数组的大小-即Integer.MAX_VALUE

Mohammad answered 2020-01-10T09:25:39Z

0 votes

请参阅下面的arraylist代码,当您创建时默认为10列表

l = new ArrayList();
public class ArrayList extends AbstractList implements List,
Cloneable, Serializable, RandomAccess {
private static final long serialVersionUID = 8683452581122892189L;
private transient int firstIndex;
private transient int lastIndex;
private transient E[] array;
/**
* Constructs a new instance of {@code ArrayList} with ten capacity.
*/
public ArrayList() {
this(10);
}
Dead Programmer answered 2020-01-10T09:25:59Z
0 votes

为java数组中的项目编号应从零开始。 我认为这可以访问Integer.MAX_VALUE + 1个项目。

Oleksy Ostanin answered 2020-01-10T09:26:19Z