java的hash Code的使用方法_第1页
java的hash Code的使用方法_第2页
java的hash Code的使用方法_第3页
java的hash Code的使用方法_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——java的hashCode的使用方法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这个方法是用来鉴定2个对象是否相等的。

那你会说,不是还有equals这个方法吗?不错,这2个方法都是用来判断2个对象是否相等的。但是他们是有识别的。

一般来讲,equals这个方法是给用户调用的,假设你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。简朴来讲,equals方法主要是用来判断从外观上看或者从内容上看,2个对象是不是相等。

举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。hashcode方法一般用户不会去调用,譬如在hashmap中,由于key是不成以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。这里不成以重复是说equals和hashcode只要有一个不等就可以了!

所以简朴来讲,hashcode相当于是一个对象的编码,就犹如文件中的md5,他和equals不同就在于他返回的是int型的,对比起来不直观。我们一般在笼罩equals的同时也要笼罩hashcode,让他们的规律一致。

举个例子,还是刚刚的例子,假设姓名和性别相等就算2个对象相等的话,那么hashco

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论