转载 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()的更多相关文章

  1. 对一致性Hash算法,Java代码实现的深入研究

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  2. 一致性hash算法及java实现

    一致性hash算法是分布式中一个常用且好用的分片算法.或者数据库分库分表算法.现在的互联网服务架构中,为避免单点故障.提升处理效率.横向扩展等原因,分布式系统已经成为了居家旅行必备的部署模式,所以也产 ...

  3. 对一致性Hash算法及java实现(转)

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  4. 对一致性Hash算法,Java代码实现的深入研究(转)

    转载:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读 ...

  5. 【转载】对一致性Hash算法,Java代码实现的深入研究

    原文地址:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细 ...

  6. Hash算法及java HashMap底层实现原理理解(含jdk 1.7以及jdk 1.8)

    现在很多公司面试都喜欢问java的HashMap原理,特在此整理相关原理及实现,主要还是因为很多开发集合框架都不甚理解,更不要说各种其他数据结构了,所以造成面子造飞机,进去拧螺丝. 1.哈希表结构的优 ...

  7. 【数据结构与算法】一致性Hash算法及Java实践

    追求极致才能突破极限 一.案例背景 1.1 系统简介 首先看一下系统架构,方便解释: 页面给用户展示的功能就是,可以查看任何一台机器的某些属性(以下简称系统信息). 消息流程是,页面发起请求查看指定机 ...

  8. Hash算法原理以及HashCode深入理解

    Java中的Collection有两类,一类是List,一类是Set.List内的元素是有序的,元素可以重复.Set元素无序,但元素不可重复.要想保证元素不重复,两个元素是否重复应该依据什么来判断呢? ...

  9. Java实现一致性Hash算法深入研究

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中”一致性Hash算法”部分,对于为什么要使用一致性Hash算法和一致性Hash算法的算法原 ...

随机推荐

  1. selector的例子

    例子1 文件名:sl_rounded_rectangle_button_picture.xml 文件内容: <?xml version="1.0" encoding=&quo ...

  2. 第九章 词典 (c)散列:散列函数

  3. AVL树与红黑树(R-B树)的区别与联系

    AVL树(http://baike.baidu.com/view/593144.htm?fr=aladdin),又称(严格)高度平衡的二叉搜索树.其他的平衡树还有:红黑树.Treap.伸展树.SBT. ...

  4. 160. Intersection of Two Linked Lists (List;Two-Pointers)

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  5. JavaScript各种继承方式(二):借用构造函数继承(constructor stealing)

    一 原理 在子类的构造函数中,通过call ( ) 或 apply ( ) 的形式,调用父类的构造函数来实现继承. function Fruit(name){ this.name = name; th ...

  6. Chrome格式化JavaScript代码

    很多第三方插件的脚本,是压缩后的代码,甚至时动态加载的,代码只有一行. Chrome提供了格式化脚本代码的功能,方便加断点调试. 1 在Sources面板中,点击脚本名称,打开脚本源码. 2 点击左下 ...

  7. 干净的ssm框架项目

    其中数据库只有如下表与字段 访问效果: 项目下载: 干净的ssm框架项目.rar

  8. 模块math和cmath

    python使用特殊命令import导入模块,再以module.function的方式使用模块 python标准库提供了一个专门用于处理复数的模块cmath,math处理数据 模块math常用的函数有 ...

  9. 自定义进度条渐变色View

    package com.jianke.stepCounter.Activity; import android.annotation.SuppressLint; import android.cont ...

  10. wheelView实现滚动选择 三方开源的封装控件 spannableString autofitTextView、PinnedSectionListView SwipeListView等等

    wheelView多用于popupwindow用来滚动选择条目 github上的开源三方控件     spannableString   autofitTextView.PinnedSectionLi ...