从HashSet的JavaDocs中:
该类为基本操作(添加,删除,包含和大小)提供恒定的时间性能,假设哈希函数将元素正确地分散在存储桶中。遍历此集合需要的时间与HashSet实例的大小(元素的数量)加上后备HashMap实例的“容量”(存储桶的数量)之和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得过高(或负载因子过低),这一点非常重要
为什么迭代需要的时间与总和(集合中元素的数量+支持映射的容量)成比例,而不仅与集合本身中的元素数量成正比?
。
HashSet使用HashMap元素作为地图键来实现。由于地图具有定义数量的存储桶,可以包含一个或多个元素,因此迭代需要检查每个存储桶,无论是否包含元素。
HashSet
HashMap