【142、hashset】

50 阅读1分钟

在 Java 中,HashSet 是一种基于哈希表实现的集合,可以用于存储一组唯一的元素。HashSet 具有以下特点:

  1. 不允许重复元素。当插入重复元素时,HashSet 不会发生任何改变。
  2. 元素是无序的。在遍历 HashSet 时,元素的顺序是不确定的。
  3. 元素可以是 null。但是只能添加一个 null 元素,因为 HashSet 中不允许重复元素。

HashSet 内部使用 HashMap 来实现。当一个元素被添加到 HashSet 中时,它实际上被存储在一个 HashMap 中,其中元素本身是 HashMap 的键,而 HashMap 的值始终是一个常量 Object(通常是 PRESENT)。

在 HashSet 中,元素的唯一性是通过元素的 hashCode() 方法和 equals() 方法来确定的。当添加一个元素时,HashSet 首先计算元素的哈希值,然后根据哈希值来确定该元素在 HashMap 中的位置。如果在该位置上已经有元素存在,那么 HashSet 会使用 equals() 方法来比较新元素和已存在的元素是否相等,如果相等,则新元素不会被添加。

需要注意的是,由于 HashSet 使用哈希表来实现,因此在使用时需要注意元素的哈希值的计算方式。如果一个类作为 HashSet 的元素,那么该类必须正确地实现 hashCode() 和 equals() 方法,以确保 HashSet 正确地识别和去重元素。