Java 哈希集在相等时不被覆盖时的行为?

标签 java collision hashset chaining

对于小组来说,这是一个非常基本的问题,可以更好地理解 Hashset行为,当 equals()方法未被覆盖。

首先我创建了一个Employee类并覆盖其 hashcode()这样每次都会返回 int 1。 (以确保碰撞)。 接下来在 main 方法中,我创建了 4/5 员工对象并将其插入 hashset 。现在,当我迭代hashset时,我可以在那里看到所有插入的对象。任何人都可以解释一下这种行为,特别是这里的链接是如何发生的(请记住我没有覆盖 equal 方法)?

最佳答案

当您不重写equals时,将使用Object.equals的默认实现,它仅检查引用相等性:使用单独的创建的两个不同的对象>new 调用总是不同的(即使它们的内容相同)。因此,难怪您会看到所有插入的对象。但即使您创建两个具有相同内容的对象,两个对象也会被插入。

分布不好的 hashCode 只会影响有效地将映射转换为链接列表的性能(除非键是 Comparable 并且您使用的是 Java-8:在这种情况下,它将转换为更类似于 TreeSet 的内容)。

关于Java 哈希集在相等时不被覆盖时的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34265186/

相关文章:

java - 自定义 ForkJoinPool 中的嵌套 ArrayList.ParallelStream() 使用线程不均匀

java - 随机数发生器

python - 查找圆与矩形碰撞的碰撞边时出现问题

android - 使用 if/if else/else 语句进行碰撞检测。如何提高?

java - 如何检查Map<String, Set<String>>中有多少个HashSet

java - 如何修复不同接口(interface)的泛型中的 "Unchecked cast"

java - 为什么 eclipse 会在这里生成语法错误?

javascript - 在 JavaScript 中解决冲突时出现意外结果

Java Horner的多项式累加法

c++ - 如何解决自定义类对象的 unordered_set 哈希函数中的这个错误?