JDK源码学习之重写hashCode()和equals()方法

为什么要重写hashCode()方法和equals()方法?

如果涉及使用对象作为key,那么key的对象都必须实现hashCode和equals方法。hashCode和equals方法持续自根类Object,若是你用自定义的类算作key的话,就需要同时覆写equals办法和hashCode方法,因为我们java的集合中判断两个对象是否相等,是根据hashCode和equals这个俩个方法。规则是先判断两个对象的hashCode是否相等,如果不相等,认为两个对象也不相等,如果相等,再判断两个对象用equals运算是否相等。如果不相等,认为两个对象也不相等,如果相等,认为两个对象相等。

  • hashCode方法,返回该对象的哈希码值。用哈希函数来计算散列值以实现哈希表这种数据结构。hashCode用来提高Map里面的搜索效率的,Map会根据不同的hashCode来放在不同的位置,Map在搜索一个对象的时候先通过hashCode找到相应的位置,然后再根据equals方法判断这个位置上的对象与当前要插入的对象是不是同一个。其实hashCode用来定位要存放的位置。我们可以通过重载hashCode方法来达到自己需要的需求。
  • equal方法默认是两个对象的引用的比较,意思就是指向同一内存(即进行内存地址的比较),地址则相等,否则不相等。但是现实中往往应用更多地是比较两个对象的内容是否相等,如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法。

猜你喜欢

转载自blog.csdn.net/sixingmiyi39473/article/details/78306296