最大尺寸是多少HashSet
, Vector
, LinkedList
?我知道ArrayList
可存储超过3277000个号码。
然而列表的大小取决于内存(堆)的大小。如果它达到最大值,JDK 会抛出一个OutOfMemoryError
.
但我不知道元素数量的限制HashSet
, Vector
and LinkedList
.
这些结构没有指定最大尺寸。
实际的实际尺寸限制可能在以下区域中的某个位置Integer.MAX_VALUE
(即 2147483647,大约 20 亿个元素),因为这是 Java 中数组的最大大小。
- A
HashSet
uses a HashMap
internally, so it has the same maximum size as that
- A
HashMap
uses an array which always has a size that is a power of two, so it can be at most 230 = 1073741824 elements big (since the next power of two is bigger than Integer.MAX_VALUE
).
-
Normally元素数量最多为桶数乘以负载因子(默认为 0.75)。However, 当。。。的时候
HashMap
停止调整大小,然后它会still允许您添加元素,利用每个存储桶都是通过链表管理的事实。因此,a 中元素的唯一限制HashMap
/HashSet
是记忆。
- A
Vector
内部使用一个数组,其最大大小恰好为Integer.MAX_VALUE
,所以它不能支持更多的元素
- A
LinkedList
doesn't使用数组作为底层存储,这样就不会限制大小。它采用经典的双向链表结构,没有固有的限制,因此它的大小为only受可用内存限制。请注意,一个LinkedList
如果大于,将错误报告尺寸Integer.MAX_VALUE
,因为它使用了int
存储大小和返回类型的字段size()
is int
以及。
请注意,虽然Collection API does定义如何Collection
超过Integer.MAX_VALUE
元素应该表现出来。最重要的是它指出了这一点the size()文档:
如果该集合包含超过Integer.MAX_VALUE
元素,返回Integer.MAX_VALUE
.
请注意,虽然HashMap
, HashSet
and LinkedList
seem支持超过Integer.MAX_VALUE
元素,none其中实施size()
方法以这种方式(即他们简单地让内部size
字段溢出)。
这让我相信其他操作also在这种情况下没有明确定义。
所以我想说的是safe使用这些通用集合up to Integer.MAX_VLAUE
元素。如果你know如果您需要存储更多内容,那么您应该切换到实际支持此功能的专用集合实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)