hashcode的作用_jdbc hibernate区别_java hashcode相同(11)

电脑杂谈  发布时间:2017-03-08 18:10:33  来源:网络整理

return (obj instanceof Integer

&& intValue() == ((Integer) obj).intValue());

}

在这个定义中,只有在包含相同的整数值的情况下这两个Integer对象是相等的。结合将不可修改的 Integer,这使得使用Integer作为HashMap中的关键字是切实可行的。这种基于值的Equal方法可以由Java类库中的所有原始封装类使用,如Integer、Float、Character和Boolean以及String(如果两个String对象包含相同顺序的字符,那它们是相等的)。由于这些类都是不可修改的并且可以实施hashCode()和equals(),它们都可以做为很好的散列关键字。

为什么忽略 equals()和hashCode()?

如果Integer不忽略equals() 和 hashCode()情况又将如何?如果我们从未在HashMap或其它基于散列的集合中使用Integer作为关键字的话,什么也不会发生。但是,如果我们在HashMap中使用这类Integer对象作为关键字,我们将不能够可靠地检索相关的值,除非我们在get()调用中使用与put()调用中极其类似的Integer实例。这要求确保在我们的整个程序中,只能使用对应于特定整数值的Integer对象的一个实例。不用说,这种方法极不方便而且错误频频。

Object的intece contract要求如果根据 equals()两个对象是相等的,那么它们必须有相同的hashCode()值。当其识别能力整个包含在equals()中时,为什么我们的根对象类需要hashCode()?hashCode()方法纯粹用于提高效率。Java平台设计人员预计到了典型Java应用程序中基于散列的集合类(Collection Class)的重要性--如Hashtable、HashMap和HashSet,并且使用equals()与许多对象进行比较在计算方面非常昂贵。使所有Java对象都能够支持 hashCode()并结合使用基于散列的集合,可以实现有效的存储和检索。

==============================

Go deep into HashCode:

==============================

为什么HashCode对于对象是如此的重要?

一个对象的HashCode就是一个简单的Hash算法的实现,虽然它和那些真正的复杂的

Hash算法相比还不能叫真正的算法,但如何实现它,不仅仅是程序员的编程水平问题,

而是关系到你的对象在存取时性能的非常重要的问题.有可能,不同的HashCode可能

会使你的对象存取产生,成百上千倍的性能差别.

我们先来看一下,在JA中两个重要的数据结构:HashMap和Hashtable,虽然它们有很

大的区别,如继承关系不同,对value的约束条件(是否允许null)不同,以及线程安全性

等有着特定的区别,但从实现原理上来说,它们是一致的.所以,我们只以Hashtable来

说明:

在java中,存取数据的性能,一般来说当然是首推数组,但是在数据量稍大的容器选择中,

Hashtable将有比数据性能更高的查询速度.具体原因看下面的内容.

Hashtable在存储数据时,一般先将该对象的HashCode和0x7FFFFFFF做与操作,因为一个

对象的HashCode可以为负数,这样操作后可以保证它为一个正整数.然后以Hashtable的

长度取模,得到该对象在Hashtable中的索引.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-36492-11.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 韩林儿
      韩林儿

      果断要找一个会踢球的老公呀~

    • 周冬辉
      周冬辉

      是不是理亏

    热点图片
    拼命载入中...