Java中的HashSets是如何工作的?

2022-09-02 09:14:25

可能的重复:
Java哈希图是如何工作的?

有人可以向我解释Java中的HashSet是如何工作的,以及为什么它们比使用ArrayLists更快吗?


答案 1

A 实际上是值始终相同的 a。HashSetHashMap

作品在许多地方被描述的方式(它也被称为“hashtable”)。简而言之:它生成键(对象)的哈希值,并将它们定位到表中。然后,每次查找密钥时,都会计算其哈希值,并直接引用表中的存储桶。这意味着您只需要一个操作(最佳情况)即可访问地图。HashMap

简单地包含键,所以是。那 和 是唯一的操作 a 比 a 快 (这是 O(n))。迭代是一样的,加法是一样的。HashSet.contains(..)O(1)remove(..)HashSetArrayList


答案 2

首先,与集合不同:它不能包含重复项,而可以 - 因此它们是为不同的目的而构建的。它也不能保证排序 - 再次,与列表不同。HashSetArrayListArrayList

第二 - a 建立在哈希表数据结构上,它允许元素的寻道时间。HashSetO(1)

请注意,很多时候,a 比 an - 例如,如果你想迭代元素 - 通常在 a 中执行此操作会比在 a 中更快 [因为哈希的缓存性能差,以及其他原因]HashSetArrayListArrayListHashSet


推荐