《大话文渊慧典》:十二、致谢
2026/8/7 11:21:04
常用实现类是 HashSet,底层依托 HashMap 实现,存入元素时分为两步判断重复:
hashCode()算出哈希值,定位数组存放位置;equals()挨个对比内容。 哈希值不一样 → 直接判定不重复,可以存入; 哈希值相同、equals 对比内容一样 → 判定重复,拒绝存入; 哈希值相同、equals 内容不同 → 哈希冲突,挂链表保存两个元素。 TreeSet 依靠 Comparable/Comparator 比较大小,返回 0 就判定重复。hashCode 定位,equals 判内容;两个都相同 = 重复
HashSet 靠先比对 hashCode 哈希值,再用 equals 对比内容,两者全都一致就判定元素重复,无法存入。
先找位置(hashCode),再比真身(equals);位置一样长相一样 = 重复
你后续不管发任何 Java 面试题、MQ、框架题,我全部套用这 4 块固定格式输出。