Equals和HashCode执行流程

时间:2015-09-28 09:30:13

标签: java

我对确切调用HashCode和equals方法感到困惑。 例如

  • 如果map.put(1,“One”)第一次调用。
  • 如果map.put(1,“Two”)第二次调用。

2 个答案:

答案 0 :(得分:4)

总是调用hashCode()。需要这样才能找到要放入条目的存储桶。

如果同一个存储桶中有一个密钥,则会调用

equals(),例如如果键是相同的。但是,如果某些哈希映射与实例完全相同,则可能不会调用equals。

注意:如果您的地图是有序地图,例如TreeMap,则不会调用hashCode或equals。 TreeMap和ConcurrentSkipListMap使用compareTo方法或提供的Comparable来确定密钥在树中的放置位置。

答案 1 :(得分:0)

hashcode()是一个生成唯一代码来查找存储桶的函数(它就像数组中的索引一样)。如果你想对对象相等做出不同的定义,那么你可以覆盖equals()。