Java的Vector类是否对它可以存储的元素数量有限制?我知道它会自动增长并且应该能够存储任意数量的元素,但是是否存在限制实际存储的元素数量的限制?除了最明显的限制,如内存不足。
答案 0 :(得分:7)
有两个限制:
Integer.MAX_VALUE
),因为基础数组中的元素由整数索引索引旁注:如果您打算使用Vector,那么请不要。而是使用ArrayList,它不是同步的,并且更适合于集合框架的其余部分。
答案 1 :(得分:5)
由于size()
的{{1}}是Vector
,这是一个32位有符号整数,因此最大元素数为2 ** 31-1或大约21亿元件。
答案 2 :(得分:5)
首先,除非您使用的是Java 1.1,否则通常使用ArrayList<E>
而不是Vector
。但是,两者都有相同的限制。
基本上,它们由数组支持,并且具有当前“实际”长度的内部int
值。因此,基于此,您将无法存储超过Integer.MAX_VALUE
个条目。但是,在你达到这一点之前,你很可能会耗尽内存。
事实上,我所看到的ArrayList
的实施方式有一个略小的限制,内部强加:
/**
* The maximum size of array to allocate.
* Some VMs reserve some header words in an array.
* Attempts to allocate larger arrays may result in
* OutOfMemoryError: Requested array size exceeds VM limit
*/
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;