HashSet、Vector、LinkedList 的最大大小

2023-11-28

最大尺寸是多少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(使用前将#替换为@)

HashSet、Vector、LinkedList 的最大大小 的相关文章

随机推荐