散列、散列码、hashCode()
来源:互联网 发布:免费淘宝客网站源码 编辑:程序博客网 时间:2024/06/08 04:41
散列:
散列就是将键保存在某处,以便能很快找到。
散列码:
1、存储一组元素最快的是数组,所以用它来表示键的信息,不是键本身,通过键对象生成一个数字,就是散列码,将其作为数组的下标。
2、因为不同的键可能生成相同的散列码,产生相同的下标,所以数组的大小就不重要了,任何键在数组中都有位置。
3、hashCode()生成的就是散列码。
举个形象一点的例子:
一年有 365 天,从 1 编号到 365,下面我定义一种编码方法,每个人按照他生日那天的编号作为他的标识码,这样,一群人每个人就会有一个标识码。
这个标识码有什么用呢?好,下面我说,请所有单号站一起,双号站一起。此后,当我要找一个人的时候,如果知道他的编号是单号,那我只需要到单号里去找,查找效率提高了一倍。
如果我说,请编号能被 16 整除的人站到一起,被 16 除余 1 的人站到一起,被 16 除余 2 的人站到一起…… 此后,当我要找一个人的时候,查找效率就会提高到 16 倍。
这就是散列码。所以,一个好的散列码算法,配合一个适当的存储机制,就能够实现高效的存储管理。
4、从上面可以知道散列码不必唯一,但是通过hashCode()和equals()必须能完全确定对象身份。
5、综上:
HashMap查询一个值的过程为:
①计算散列码;
②使用散列码查询数组;
③因为数组只是保存了值的list,所以对list中的值使用equals()进行线性查询。
所以,HashMap不是查询整个list,而是快速跳到数组的某个位置,只对很少的元素进行比较,所以查询速度快。
阅读全文
0 0
- 散列、散列码、hashCode()
- Hashcode 散列码
- hashCode散列码
- 库谜题之57名字问题(equals和hashcode)(考虑散列函数的问题)
- [强列推荐]关于java的hashCode方法
- [强列推荐]关于java的hashCode方法
- [强列推荐]关于java的hashCode方法(续)
- hashcode
- Hashcode
- hashCode()
- hashCode
- HashCode
- hashCode
- hashCode
- hashCode
- Hashcode
- hashcode
- hashcode
- pdf全功能转换器破解版
- 帮你解决VMware pro升级到14后留下的坑-----报错:无法连接 MKS: 套接字连接尝试次数太多;正在放弃
- 浅谈javaweb
- request.getSchema(),request.getServerName(),request.getServerPort(),request.getContextPath()的含义及使用
- 牛客网---2016---美团二维数组打印
- 散列、散列码、hashCode()
- MD5加密
- 九度OJ题目1448:Legal or Not
- 如何把任意一个文件夹的快捷方式放到任务栏?
- PHP单引号和双引号区别
- 剑指Offer------两个链表的第一个公共结点
- [paper]summary(event detection)
- SpringMVC与Struts2的区别
- Object的wait、notify、notifyall方法解析