java中的hashcode
来源:互联网 发布:依图 知乎 编辑:程序博客网 时间:2024/06/06 17:45
hashcode()是干什么用的?
首先hashcode是哈希算法的一中简单实现,他是一个对象的哈希吗值。一般和equals一起使用。
hashcode也是用来查找的,如果你学过数据结构就应该知道,在查找和排序这一章有
例如内存中有这样的位置
0 1 2 3 4 5 6 7
而我有个类,这个类有个字段叫ID,我要把这个类存放在以上8个位置之一,如果不用hashcode而任意存放,那么当查找时就需要到这八个位置里挨个去找,或者用二分法一类的算法。
但如果用hashcode那就会使效率提高很多。
我们这个类中有个字段叫ID,那么我们就定义我们的hashcode为ID%8,然后把我们的类存放在取得得余数那个位置。比如我们的ID为9,9除8的余数为1,那么我们就把该类存在1这个位置,如果ID是13,求得的余数是5,那么我们就把该类放在5这个位置。这样,以后在查找该类时就可以通过ID除8求余数直接找到存放的位置了。一般来说,hash算法越散,效率越高.
2.但是如果两个类有相同的hashcode怎么办那(我们假设上面的类的ID不是唯一的),例如9除以8和17除以8的余数都是1,那么这是不是合法的,回答是:可以这样。那么如何判断呢?在这个时候就需要定义 equals了。
也就是说,我们先通过 hashcode来判断两个类是否存放某个桶里,但这个桶里可能有很多类,那么我们就需要再通过 equals 来在这个桶里找到我们要的类。
那么。重写了equals(),为什么还要重写hashCode()呢?
想想,你要在一个桶里找东西,你必须先要找到这个桶啊,你不通过重写hashcode()来找到桶,光重写equals()有什么用啊
3。你要对A类排序,有两种方法,一种就是让A类实现comparabole结构并实现compareTo()方法,那么可以通过Collections.sort(List <A> list)对其进行排序
另一种方法:自己定义一个类B实现Comparator类并实现compare方法,
然后通过Collections.sort(List <A> list,B b)进行排序
hashcode也是用来查找的,如果你学过数据结构就应该知道,在查找和排序这一章有
例如内存中有这样的位置
0 1 2 3 4 5 6 7
而我有个类,这个类有个字段叫ID,我要把这个类存放在以上8个位置之一,如果不用hashcode而任意存放,那么当查找时就需要到这八个位置里挨个去找,或者用二分法一类的算法。
但如果用hashcode那就会使效率提高很多。
我们这个类中有个字段叫ID,那么我们就定义我们的hashcode为ID%8,然后把我们的类存放在取得得余数那个位置。比如我们的ID为9,9除8的余数为1,那么我们就把该类存在1这个位置,如果ID是13,求得的余数是5,那么我们就把该类放在5这个位置。这样,以后在查找该类时就可以通过ID除8求余数直接找到存放的位置了。一般来说,hash算法越散,效率越高.
2.但是如果两个类有相同的hashcode怎么办那(我们假设上面的类的ID不是唯一的),例如9除以8和17除以8的余数都是1,那么这是不是合法的,回答是:可以这样。那么如何判断呢?在这个时候就需要定义 equals了。
也就是说,我们先通过 hashcode来判断两个类是否存放某个桶里,但这个桶里可能有很多类,那么我们就需要再通过 equals 来在这个桶里找到我们要的类。
那么。重写了equals(),为什么还要重写hashCode()呢?
想想,你要在一个桶里找东西,你必须先要找到这个桶啊,你不通过重写hashcode()来找到桶,光重写equals()有什么用啊
3。你要对A类排序,有两种方法,一种就是让A类实现comparabole结构并实现compareTo()方法,那么可以通过Collections.sort(List <A> list)对其进行排序
另一种方法:自己定义一个类B实现Comparator类并实现compare方法,
然后通过Collections.sort(List <A> list,B b)进行排序
- java中的hashcode
- java 中的hashcode&equals
- java中的hashCode方法
- java中的hashCode
- Java中的hashcode
- Java中的HashCode方法
- Java中的hashcode方法
- java中的hashcode方法
- Java中的HashCode
- Java中的hashcode方法
- java中的HashCode
- Java中的equals(),hashcode()
- Java 中的 hashcode一
- Java中的hashCode二
- Java中的hashcode方法
- Java中的hashcode方法
- Java中的hashCode
- Java中的hashcode方法
- 超经典的Android开源项目
- MPEG4 笔记3(TRAK,TKHD, MVHD)
- 加载显示交通网络
- PHP跟据生日获取年龄
- eclipse变量高亮显示
- java中的hashcode
- [维基演义第XX回] 吹实力安保公司遭狠嘲,防解密美国银行有茅招
- 使用PHP创建一个REST API(Create a REST API with PHP)
- 模仿android新浪微博手机客户端项目
- 萨摩亚变更时区成第一个见到太阳国家
- VBScript中"\"与"/"运算符的区别
- C#条形码生成(二)----Code128抽象类
- JS delete 运算符
- 笔记本登录密码错误