hashCode()和equals()总结

哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法:

public native int hashCode();


  为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法。根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现。

在包含容器的程序设计语言中hascode()有着广泛的应用,今天我们主要谈及hashCode在java中是如何配合equals()一起使用来提高效率的,在Java中也一样,hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable。

我们知道在这些容器中添加一个元素的时候先去判断是不是已经存在这个对象了,这个比较可以使用equals()方法来进行,但是这种比较一般会比较很多东西,在少量的比较中可以接受如果当数据多了达到万数以上那将会严重的影响着效率,怎么解决呢?这里有一个方法,就比如是在hashmap中就维持着一个hash表,这个表保存着这个对象调用hashCode方法后生成的一个整形数值(java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的 字段等)映射成一个数值,这个数值称作为散列值),在插入的时候首先会去这个hash表中是否已经存在这个hash值,如果不存在的话就可以直接添加,如果存在则调用equals()方法,如果调用equals方法后还是想等的话说明这个对象是真的已经存在的,如果不相等的话就可以添加!

这里有几个重点内容:

hash值不等对象一定不等!

hash值相等,对象不一定不等!

equals()为真则hash值一定相等!

equals()为假hash值不一定不等!

下一篇:java中的hashCode()方法的实现方式,敬请期待!

猜你喜欢

转载自blog.csdn.net/qq_30675777/article/details/81536533