从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算法的算法原 ...
随机推荐
- Structured streaming
Structured streaming是spark 2.0以后新增的用于实时处理的技术.与spark streaming不同的是,Structured streaming打开了数据源到数据落地之间的 ...
- 【scrapy】爬虫的时候总在提示 KeyError: 'novelLabel'
调试的时候总是提示 KeyError: 'novelLabel'然后决定断点调试一下, 在def parse_book_list(self, response):方法下,添加print(respons ...
- 修改.net反编译的dll
用.Net reflector 打开,配合reflexil工具. 有两种修改方法. 1.重写,试过,但不好用. 2.修改IL指令 一般只需修改简单的if判断. 方法:找到需要修改的行,把brfalse ...
- 【Nodejs】Node.js(Express)の環境構築
[Express]の環境 参考URL:http://expressjs.com/en/starter/generator.html ①Node.jsの準備 (参考URL:https://www.cnb ...
- 关于JavaScript全局作用域和函数作用域的拙见
在类c的语言中,用{}引起来的部分称为块级作用域,而在JS中没有块级作用域 作用域:一个变量作用的范围:中Js中一共有两种作用: 全局作用域 - 直接编写在script标签中的JS代码,都在全局作用域 ...
- as3.0去除空格
var str:String="是 我们 呀CuPlay er.com网站" function trim(string:String):String { return string ...
- DHCP server 冒充及DOS攻击处理方案
一.DHCP服务器在运维上存在的常见问题: 1. DHCP服务器冒充 在DHCP服务器和客户端之间没有认证机制,如果在DHCP server覆盖的网络上随意接入一个DHCP server,就有可能造成 ...
- NumPy 从已有的数组创建数组
NumPy 从已有的数组创建数组 本章节我们将学习如何从已有的数组创建数组. numpy.asarray numpy.asarray 类似 numpy.array,但 numpy.asarray 只有 ...
- js正则表达式中的正向肯定预查和正向否定预查
对于没有使用过这几个表达式的人,应该对这个概念都有点不太理解,下面就以实际例子说明这几个表达式的用户. 一.?:pattern——匹配检验:会作为匹配校验,是一个非获取匹配,并出现在匹配字符结果里面, ...
- 微信小程序开发-rem转换rpx小工具
实现原理: 对样式进行格式化,然后根据 “rem” 进行拆分,这样就会拆分成一个数组 [str1,str2,str3...,str6], 除了最后一个元素,前边的元素都会以 “rem” 样式的数值结尾 ...