学习笔记40-哈希码(HashCode)

学习笔记40-哈希码(HashCode)哈希码哈希码是一种算法 它的目的是让同一个类的对象按照自己不同的特征尽量地有不同的哈希码 但是 不表示不同的对象哈希码完全不同 也可能有相同的情况 在 Java 中 哈希码代表对象的特征 hashCode 在 Java 中 hashCode 是 jdk 根据对象的地址或者字符串或者是数字算出来的 int 类型的数值 常见的哈希码的算法有 1 Object 类的 hashCode 返回对象的内存地址经过处理后的结构 由于

哈希码

哈希码是一种算法,它的目的是让同一个类的对象按照自己不同的特征尽量地有不同的哈希码,但是,不表示不同的对象哈希码完全不同。也可能有相同的情况。在Java中,哈希码代表对象的特征。

hashCode

在Java中,hashCode是jdk根据对象的地址或者字符串或者是数字算出来的int类型的数值。

常见的哈希码的算法有:

1:Object类的hashCode :返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。

2:String类的hashCode :根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串内容相同,返回的哈希码也相同。

3:Integer类 :返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。

equal

public class User { 
    private String userName; //get ,set方法省 //覆盖Object里的equals方法 public boolean equals(Object arg0) { if (!(arg0 instanceof User)) { return false; } User user = (User)arg0; //如果名字相同,则表示属于同一个对象。 if(user.getName().equals(this.getName)) { return true; } else { return false; } }

这样hibernate在插入数据的时候,如果传过来一个叫”张三”的用户,hibernate会先判断有没有叫“张三”的用户,如果没有,就允许插入,如果有,就不允许插入。这样做可以保证数据的高度一致性,不同的项目有不同的需求,所以要根据自己的需求来覆盖equals方法。

哈希学习

哈希学习的目的:

哈希学习的分类:

  1. 第一种的代表是局部敏感哈希,这种方法主要是人工设计或者随机生成哈希函数,是一种数据独立的方法;
  2. 第二种是哈希学习的方法,希望从数据中自动学习出哈希函数,是一种数据依赖的方法;也是现在主流的方法;
    显然第二种具有数据依赖性,是一种更有适应性的方法。

哈希学习的步骤:

  1. 先对原空间的样本进行降维, 得到1个低维空间的实数向量表示;
  2. 对得到的实数向量进行量化(即离散化)得到二进制哈希码;

量化方法:

  1. SBQ:对于给出向量的每一个维度的数值,我们设定一个阈值。然后根据这个维度数值的情况与阈值作比较,确定其映射的二进制数是2还是1。之后我们把每个维度映射出的二进制数串起来组成哈希码。
    比如某一向量为[4,3,7,8],我们设定阈值为5,并且>=5为1,反之为0.
    那么该向量对应的二进制哈希码为0011.

  2. HQ:跟SBQ比较类似,是将每一个维度划分为四个区域,使用三个阈值和两位二进制码来编码。
    比如一个向量为[4,3,7,8],我们设定三个阈值,2.5, 4.5, 6.5。可以把一个维度分成四个区域,每个区域分别用两位二进制码表示:00,01,10,11
    那么上面的变量对应的哈希码是0

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231565.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 白话经典算法系列之六 高速排序 高速搞定

    白话经典算法系列之六 高速排序 高速搞定

    2021年12月6日
    38
  • c语言qq加密具体思路,悄悄告诉你:C语言如何实现QQ密码大盗

    c语言qq加密具体思路,悄悄告诉你:C语言如何实现QQ密码大盗该楼层疑似违规已被系统折叠隐藏此楼查看此楼一般的盗密码的软件的软件都是通过监视键盘来获得密码,这样操作比较方便,但是这样也存在一定问题,密码有的时候不是很准确,因为有的人输入密码并不是从前到后输入,当然这样的人也是少数,盗密码嘛,当然去得到那些比较粗心的人的密码!通过安装钩子来监视QQ登陆界面就是获得密码的方法,在安装前得先找到登陆窗口的句柄,当钩子安装后,记录键盘,当用户“回车”或是点了“登陆…

    2022年7月20日
    15
  • HDU 6034 Balala Power!【排序/进制思维】

    HDU 6034 Balala Power!【排序/进制思维】

    2022年3月8日
    44
  • Oracle 根据dbf文件的数据恢复[通俗易懂]

    Oracle 根据dbf文件的数据恢复[通俗易懂]数据丢失真的是很严重的事情,此处记录下一次数据恢复的历程。背景:服务器上,Oracle数据库数据丢失,开发机上,有数据,但是因为系统坏了(太巧了),先进去把dbf文件备份出来,然后重做了系统(全盘格式化的,不要问我为什么不是只有c盘,售后做的,所以才有了后面数据恢复困难的事情)。数据恢复方法:1.闪回2.根据dbf恢复3.使用工具prm-dul方案一:数据闪回。…

    2022年7月17日
    12
  • 段式液晶_段式数码 电容 液晶

    段式液晶_段式数码 电容 液晶一 段式液晶BL55070驱动IC:I2C接口4X35断码显示,宽工作电压(2.5~5.5V),-20~70度,静态1/21/31/4背级输出,1/21/3偏置电压生产厂商:上海贝

    2022年8月1日
    4
  • keyvaluepair_KeyValuePair用法(转)

    keyvaluepair_KeyValuePair用法(转)C#KeyValuePair的用法。结构体,定义可设置或检索的键/值对。也就是说我们可以通过它记录一个键/值对这样的值。比如我们想定义一个ID(int类型)和Name(string类型)这样的键/值对,那么可以这样使用。//////设置键/值对//////privateKeyValuePairSetKeyValuePair(){intintKey=1;stringstrV…

    2022年7月26日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号