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

HashSet的迭代成本还取决于支持映射的容量吗?

太叔望
2023-03-14
问题内容

从HashSet的JavaDocs中:

该类为基本操作(添加,删除,包含和大小)提供恒定的时间性能,假设哈希函数将元素正确地分散在存储桶中。对此集合进行迭代需要的时间与HashSet实例的大小(元素的数量)加上后备HashMap实例的“容量”(存储桶的数量)之和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得过高(或html" target="_blank">负载因子过低),这一点非常重要

为什么迭代需要的时间与总和(集合中元素的数量+支持映射的容量)成比例,而不仅与集合本身中的元素数量成正比?


问题答案:

HashSet使用HashMap元素作为地图键来实现。由于地图具有定义的数量的存储桶,可以包含一个或多个元素,因此迭代需要检查每个存储桶是否包含元素。



 类似资料:
  • 我有我创建的地图的地图 我尝试在第二个映射中迭代键的值。 所以它可以是这样的: key1->keya->value1 -------->键->值2 -------->键->值4 -------->KeyC->value1 我想继续多久就继续多久。 因此,我有,并尝试使用名为的值变量和增量计数器if来循环中的所有值 我不知道如何获得。我试着这样做 但这给了我信笺。 如果我执行,它会给出我想要的正确值

  • 本文向大家介绍C++映射迭代器,包括了C++映射迭代器的使用技巧和注意事项,需要的朋友参考一下 示例 容器中第一个元素的迭代器。 如果映射对象是const限定符,则该函数返回const_iterator。否则,返回iterator。 输出: a => 200 b => 100 c => 300

  • 我发现了这个关于使用限定符进行可迭代到不可迭代映射的示例: 但是,如果我想从emails集合的第一个元素中提取一个特定的字段,例如,就像我处理code一样? 例如,我希望编写如下的映射:

  • 我试图在两个进程之间共享从USB摄像头(logitech c270)接收到的帧(图像),以便避免出现。我正在使用这里描述的内存映射流式I/O方法,在使用后,我可以成功地从相机获取帧。但是,我有另一个进程(用于图像处理),它必须在出列后使用图像缓冲区,并向第一个进程发出信号,再次对缓冲区进行排队。 在网上搜索,我可以发现打开视频设备多次是允许的,但是当我尝试映射(尝试两个和只是)在第二个过程后成功的

  • 问题内容: 我有一个用ResultSet作为数据成员实现Iterator的类。本质上,该类如下所示: 我如何检查ResultSet是否有另一行,所以由于ResultSet本身未定义hasNext,因此可以创建有效的hasNext方法?我当时在想查询以获取计数并管理该数字以查看是否还有另一行,但我想避免这种情况。 问题答案: 这是一个坏主意。这种方法要求连接一直保持打开状态,直到读取最后一行为止,并

  • 我有两个地图,键为整数,值为双倍。 我想创建第三个按键排序的映射,值将是两个映射的双精度列表。 地图1: Map2: 最终地图: 如上所述,如果一个地图中的一个键在另一个地图中丢失,则另一个地图的最终地图中的值应默认为0.00 我可以使用putAll方法将所有键放入第三张地图。但如何按照我的意愿设定这些值呢? 感谢阅读!