一尘不染

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

algorithm

HashSet的JavaDocs中:

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

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


阅读 207

收藏
2020-07-28

共1个答案

一尘不染

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

2020-07-28