Java中的hashCode方法和hashCode值以及应用

       Java中的基本的类都有一个hashCode方法用来生成一个int值,我们称之为hashCode值,这个值是根据一定的规则(比如对象的存储地址,对象的字段等)生成的,这个值的作用是为了提高集合类的性能,例如HashSet、HashMap以及HashTable。我们可可以修改这个值的生成方式来自定义hashCode生成方法。

哈希值(同散列值)
       把任意长度的输入通过哈希算法(散列算法)变换成固定长度的输出,该输出就是哈希值(散列值)。这种转换是一种压缩映射,所以散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。

哈希算法(同散列算法)
        用于生成哈希值的算法就是哈希算法,所有散列函数都有如下一个基本特性:

       1. 如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果。

       2.散列函数的输入和输出不是一一对应的,如果两个散列值相同,两个输入值很可能是相同的,但不绝对肯定二者一定相等(可能出现哈希碰撞)。输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。

       以前从来都没有直接使用过这个值。一直没怎么了解,但是最近碰到一个大数据量的聚类问题。平台每天接收到上千万的数据量并将这些数据写入kafka,要求id值相同的数据写入同一个topic中。因为数据量很大所以不能存到缓存和数据库。必须想办法实时计算。并保证相同的值计算的结果一致。

       最终参照hashCode值的生成方式来生成一个hashCode值。这样就不需要将id存储起来。每次只要用新的id计算hashCode值,再%10之后获取绝对值,就能获取到对应要写入的分区。又能保证同一个id生成的hashCode值相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值