关于hashcode()的作用

原创 2015年11月21日 15:09:50

原文的地址:http://my.oschina.net/91jason/blog/306996

另一个关于hashcode()的博客地址:http://www.cnblogs.com/dolphin0520/p/3681042.html

有许多人学了很长时间的Java,但一直不明白hashCode方法的作用, 
我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。   
总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。 
你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。 
那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢? 
这就是Object.equals方法了。但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。 
也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大降低效率。    
于是,Java采用了哈希表的原理。哈希(Hash)实际上是个人名,由于他提出一哈希算法的概念,所以就以他的名字命名了。 
哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。如果详细讲解哈希算法,那需要更多的文章篇幅,我在这里就不介绍了。 
初学者可以这样理解,hashCode方法实际上返回的就是对象存储的物理地址(实际可能并不是)。   
这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。 
如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,
就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。 
所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。   
所以,Java对于eqauls方法和hashCode方法是这样规定的: 
1、如果两个对象相同,那么它们的hashCode值一定要相同;2、如果两个对象的hashCode相同,它们并不一定相同     上面说的对象相同指的是用eqauls方法比较。   
你当然可以不按要求去做了,但你会发现,相同的对象可以出现在Set集合中。同时,增加新元素的效率会大大下降。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Hashcode的作用

一直以来都想写篇文章来说明下hashCode的作用以及相关的知识,许久没动笔,最近找了点资料,自己整理了一下,于是就诞生了下面的东西! (1)前言,想要明白hashCode的作用,你必须要先知道...

Java中 HashCode的作用

============================================================ 如何理解hashCode的作用:=======================...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

HashCode的意义和作用

HashCode的意义和作用HashCode的介绍哈希码是按照某种规则生成的int类型的数值哈希码并不是完全唯一的。让同一个类的对象按照自己不同的特征尽量的有不同的哈希码,但不是说不同的对象哈希码就一...

关于hashCode方法的作用

有许多人学了很长时间的Java,但一直不明白hashCode方法的作用, 我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。   总的来说,Java中的集合(Col...
  • huxin1
  • huxin1
  • 2011-04-15 10:56
  • 15240

Java equals()和hashCode()的作用

Java equals()和hashCode()的作用 2012-02-25 15:42 by Rainbow, 137 visits, 收藏, 编辑 Object的方法 equa...

java中hashcode与equals方法的作用

原文地址:点击打开链接 以下是关于HashCode的官方文档定义: [plain] view plain copy hashcode方法返回该...

Java中hashCode的作用

关于hashCode方法,有以下解读: 1、hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址...

对象访问,java栈,java堆,hashcode()的作用

1.对象访问 Java虚拟机学习 - 对象访问

Java中hashCode的作用

以下是关于HashCode的官方文档定义:[plain] view plain copy print?hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.uti...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)