当前位置: 首页 > 面试题库 >

HashSet,Vector,LinkedList的最大大小

宫俊才
2023-03-14
问题内容

什么是最大尺寸HashSetVectorLinkedList?我知道ArrayList可以存储超过3277000个数字。

但是,列表的大小取决于内存(堆)的大小。如果达到最大值,则JDK会抛出一个OutOfMemoryError

但我不知道中的元素数量的限制HashSetVectorLinkedList


问题答案:

这些结构没有指定的最大大小。

实际的实际大小限制可能在大约某个区域内Integer.MAX_VALUE(即2147483647,大约20亿个元素),因为这是Java中数组的最大大小。

  • A HashSetHashMap内部使用,因此其最大大小与
    • A HashMap使用的数组的大小始终是2的幂,因此它最多可以是2 30 = 1073741824个元素大(因为下一个2的幂要大于Integer.MAX_VALUE)。
    • 通常 ,元素数最多是存储桶数乘以负载系数(默认为0.75)。 但是 ,当HashMap停止调整大小时,它 仍然 允许您添加元素,从而利用了每个存储区都是通过链接列表进行管理的事实。因此,HashMap/中元素的唯一限制HashSet是内存。
  • A Vector内部使用的数组的最大大小恰好为Integer.MAX_VALUE,因此它不能支持那么多元素
  • A LinkedList 使用数组作为基础存储,因此不会限制大小。它使用没有内在限制的经典双向链表结构,因此其大小 受可用内存的限制。请注意,LinkedList如果Integer.MAX_VALUEa 大于,则会错误地报告大小,因为a使用int字段存储大小,并且返回类型size()int为。

请注意,尽管CollectionAPI
确实
定义了元素Collection多于a的Integer.MAX_VALUE行为。更重要的是它指出此的size()文档:

如果此集合包含多个Integer.MAX_VALUE元素,则返回Integer.MAX_VALUE

请注意,虽然HashMapHashSet并且LinkedList 似乎 支持多Integer.MAX_VALUE元素, 没有
那些实施size()这种方式方法(即它们只是让内部size字段溢出)。

这使我相信在这种情况下其他操作 也不 是很明确。

所以我想说,将那些通用集合与 最多 元素一起使用是 安全的 。如果您 知道 需要存储更多存储空间,则应切换到实际支持此功能的专用集合实现。
Integer.MAX_VLAUE



 类似资料:
  • 问题内容: 所以基本上我正在生成随机的10000个IP地址,我想存储在HashSet中找到的所有那些IP地址,但是根据我的计算,发现了大约6000个IP地址,但是在HashSet中仅存储了700个IP地址?HashSet在存储String方面是否有任何限制。任何建议将不胜感激。 问题答案: 就您而言,没有限制(限制是数组的最大大小,即2 ** 31)。 但是,仅存储 唯一 值,因此我的猜测是您仅生

  • 问题内容: 我想在HashSet和HashMap中找到最大的数字。假设我的HashSet中有数字[22,6763,32,42,33],我想在当前的HashSet中找到最大的数字。我该怎么做?对于HashMap也是如此。希望您能帮助我。谢谢。 问题答案: 您可以用来从任何集合中找到最大的元素。同样,对于,您可以在或上使用相同的方法,具体取决于您想要的是最大键值还是最大值。 另外,如果您愿意,可以使用

  • 问题内容: 为什么会限制其大小? 我浏览了一些链接:http : //www.coderanch.com/t/540346/java/java/maximum-size-hold- String-buffer 。 是因为count成员变量是int吗? 假设我们有2 ^ 31-1个字符,并在其中追加了一些字符。Count成员变量将增加附加的字符数,如果Count变量已经达到最大值(2 ^ 31-1)

  • 带有元素v1,v2,v3,...,vn的向量v的大小由公式给出 - | V | =√(v1 2 + v2 2 + v3 2 + ... + vn 2 ) 您需要采取以下步骤来计算向量的大小 - 使用array multiplication (。*)获取向量的array multiplication 。 这产生了矢量sv,其元素是矢量v的元素的平方。 sv = v。* v; 使用sum函数得到向量v

  • 问题内容: PHP会话中可以存储的最大大小是多少? 问题答案: 您可以在会话中存储任意数量的数据。所有会话都存储在服务器上。您可以达到的唯一限制是脚本一次可以消耗的最大内存,默认情况下为128MB。

  • 这听起来可能像是JavaFX ImageView设置的最大大小的重复,但它是不同的。 我想限制ImageView的最大大小。不幸的是,设置ImageView大小的唯一方法似乎是fitWidth和fitHeight,但是如果图像小于配合值,则会放大图像。 我尝试将fitWidth/fitHeight设置为0/0,并将ImageView包装到设置了maxWidth的窗格中-没有成功(图像以原始大小显示