从hash算法到java hashcode()
转载 https://blog.csdn.net/Walk_er/article/details/74976146
hash算法是一个摘要算法(yy:描述性算法:可以给一个物体确切的描述,但是不能通过这个描述去确定这个物体):,从数据A的基础上,获取一个新的数据B,那么B就是A的指纹,它从某种程度上“描述”了A。
指纹数据一般都是整型数据。
hash算法有很多应用: 加密:MD5 SHA1等;辨数据完整性(是否被篡改过);编程领域它还可以用在快速存取上,也就是Hash表。
哈希算法并不是一个特定的算法而是一类算法的统称。哈希算法也叫散列算法,满足这样的关系式:f(data)=key,输入任意长度的data数据,定长的key。这个过程是不可逆的,无法由key逆推出data,这个特性用于加密算法
场景一: 快速存取
如果你只有两个对象(包含多条数据的集合),你想比较他们,那你肯定用不着hash算法,但是如果你有20,000个对象,当你新拿来一个对象想看看这20,000个对象里面有没有跟他重复的那你就要循环比较20000次,挨个进行比较,再或者你想在这20000个数据中剔除掉重复的,如果迭代进行比较那就有的忙了。而如果有一个算法可以根据对象内部的多个数据生成一个新的数据(“指纹”),之后只需要比较这个指纹,那工作就立马变的简单了。
场景二: 信息摘要 (既描述的对比)
比如百度云盘——人们把文件上传上云盘中。但其实很多文件是重复的,什么MP3之类的,基本就是那么相同的几个。服务器没有必要重复存储这么多信息。一个合理的方式是,当用户上传一个文件时,给文件一个哈希码。当另一个用户上传同一个文件时,先在服务器查有无这个哈希码,如果有,用户就不用上传了,这就是所谓妙传技术,有时候几百M的文件,瞬间就上传完毕就是这个道理,另一方面,再下载某个文件的时候,为了检查所下载的文件是否完整,没有损坏,会对下载完的文件做一次MD5,与之前的文件‘指纹’做对比。
场景三: 加密
密码的使用,可能大家都看过谍战片,电报以密文形式传输,https也是密文传输,这是一种既可以加密也可以解密的加密方式,一旦被敌人知道了密钥就会被破解。不要局限于这种加密方式。还有一种加密方式,在特定条件下有用,比如登录密码(要求不可逆)。我们设定登录密码的初衷并非为了告知别人我的密码内容是什么,那么我们的密码就可以使用不可以解密的方式被加密,假如我设置了密码abc,它被加密成为xyz(f(abc)=xyz),在我登录的时候系统不需要解密xyz,而是要求我再次输入可以被加密为xyz的密码。
java中hashcode()方法就是产生一个对象的指纹数据,这个指纹数据有比较小的可能性会发生碰撞,这时候就只能通过equals方法来进行判断了。
而hashcode()方法的应用就是在hashmap和hashtable了。
tip:
哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法
——《数据结构与算法分析》
从hash算法到java hashcode()的更多相关文章
- 对一致性Hash算法,Java代码实现的深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
- 一致性hash算法及java实现
一致性hash算法是分布式中一个常用且好用的分片算法.或者数据库分库分表算法.现在的互联网服务架构中,为避免单点故障.提升处理效率.横向扩展等原因,分布式系统已经成为了居家旅行必备的部署模式,所以也产 ...
- 对一致性Hash算法及java实现(转)
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
- 对一致性Hash算法,Java代码实现的深入研究(转)
转载:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读 ...
- 【转载】对一致性Hash算法,Java代码实现的深入研究
原文地址:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细 ...
- Hash算法及java HashMap底层实现原理理解(含jdk 1.7以及jdk 1.8)
现在很多公司面试都喜欢问java的HashMap原理,特在此整理相关原理及实现,主要还是因为很多开发集合框架都不甚理解,更不要说各种其他数据结构了,所以造成面子造飞机,进去拧螺丝. 1.哈希表结构的优 ...
- 【数据结构与算法】一致性Hash算法及Java实践
追求极致才能突破极限 一.案例背景 1.1 系统简介 首先看一下系统架构,方便解释: 页面给用户展示的功能就是,可以查看任何一台机器的某些属性(以下简称系统信息). 消息流程是,页面发起请求查看指定机 ...
- Hash算法原理以及HashCode深入理解
Java中的Collection有两类,一类是List,一类是Set.List内的元素是有序的,元素可以重复.Set元素无序,但元素不可重复.要想保证元素不重复,两个元素是否重复应该依据什么来判断呢? ...
- Java实现一致性Hash算法深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中”一致性Hash算法”部分,对于为什么要使用一致性Hash算法和一致性Hash算法的算法原 ...
随机推荐
- IronPython 的几个问题
1.在脚本中使用datagridview.Rows[i].Cells[1].Value并将其转换为string时,遇到int类型 有时可是直接使用.toString()转换为字符 有时必须采用str( ...
- data属性(The Data Attribute)
HTML片段 <div id="myDiv" data-custom-attr="My Value"> 巴拉巴拉,lady 嘎嘎 </div& ...
- Django项目之客户
关于客户的操作 主页(被继承) {% load static %} <!DOCTYPE html> <html lang="en"> <head> ...
- Fiddler调试和Wireshark数据包分析
扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主
- TZOJ 1594 Optimal Milking(二分+最大流)
描述 FJ has moved his K (1 <= K <= 30) milking machines out into the cow pastures among the C (1 ...
- EOJ Monthly 2018.7 B.锐角三角形(数学几何+思维)
描述 是否存在面积为S/2的整点锐角三角形?存在输出Yes并输出三个整点坐标,否则输出No. 注意如果存在输出的坐标必须在long long范围内. Input 第一行一个整数S(1<=S< ...
- .“代理XP”组件已作为此服务器安全配置的一部分被关闭的解决办法
“代理XP”组件已作为此服务器安全配置的一部分被关闭.系统管理员可以使用sp_configure来启用“代理XP”.有关启用“代理XP”的详细信息,请参阅SQL Server联机丛书中的“外围应用配置 ...
- 使用HttpClient 传送form 表单的请求
在项目中用到了,需要使用HttpClient 进行模拟表单传送form 表单的需求,在平常的项目中,大概都是传送json串的样式需求,但是如何才能给对应的服务器传送一个form 表单呢? 这就需要了N ...
- MySQL安装(windows版本)
1.下载.MySQL http://dev.mysql.com/downloads/mysql/ 下载windows的zip包,解压后,添加path路径bin, 系统环境变量->path-> ...
- Head First Servlets & JSP 学习笔记 第二章 —— Web应用体系结构
Servlet没有main()方法,所以Servlet受其他人控制,这个其他人就是容器!而Tomcat就是一种容器. 容器向Servlet提供Http请求和Http响应:容器来调用Servlet的do ...