从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算法的算法原 ...
随机推荐
- 【翻译】View Frustum Culling --3 Clip Space Approach – Extracting the Planes
3.使用裁剪空间的方法提取平面 上一篇中,我们讨论了通过几何的方法提取视锥体的六个片面.在这一篇中,我们继续讨论通过裁剪空间的方法来提取视锥体的平面. 假设现在在世界坐标系中有一点p=(x,yz,1) ...
- windows下python文件与文件夹操作
一.导入模块 imoprt os 二.获取python当前执行的目录 s=os.getcwd() 三.创建文件 import datetime import os dtime=datetime.dat ...
- 线程 Thread Handler
new Thread(new Runnable() { @Override public void run() { Message msg = new Message(); msg.what = 0; ...
- laravel框架部署后有用命令
1.重新生成APP_KEY php artisan key:generate执行后.env文件内的APP_KEY重新生成. 2.修改.env文件内系统运行环境,由debug环境设置为生产环境 APP_ ...
- mybatis 返回类型为 java.lang.String 接收为null的情景
<select id="selectOnly" parameterType="java.util.Map" resultType="java.l ...
- java调用dll
@参考文章1,@参考文章2 根据上篇博客(参考文章2)java生成的dll测试 1,新建java项目,新建WebContent,子目录建WEB-INF\lib,加进jna-3.4.0.jar 新建ja ...
- SQL2008用sql语句给字段添加说明
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'字段说明文字' , @level0type=N'SCHEMA',@l ...
- [leetcode]151. Reverse Words in a String翻转给定字符串中的单词
Given an input string, reverse the string word by word. Example: Input: "the sky is blue", ...
- pthreads v3下的worker和pool的使用
有些人会想,明明用thread已经可以很好的工作了,为什么还要搞个worker和pool? 之所以要用到worker和pool还是因为效率,因为系统创建一个新线程代价是比较昂贵,每个创建的线程会复制当 ...
- rsync同步工具的配置与使用
一.什么是rsync?rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具. rsync官网 http://rsync.samba.org/ 二.rsync的工 ...