【Java 没基础之 Guava 用户指南个人翻译】—— Hashing

前言:

Guava 是非常棒的 Java 核心类库,其中各种工具类比如集合框架、图形库、工具类、字符串工具类、缓存技术等实现要优于Java本身的一部分代码。
于是我在业余时间开始结合网上资料加上我自己使用时的一些理解,翻译用户指南并完成一部分优秀代码的中文解析。
不求对别人多大帮助,只求查缺补漏

【Java 没基础——Guava用户指南】Hashing (哈希)

Overview (概述)

Java 的 HashCode 的长度被限制在 32 位,并且哈希算法与他们作用的数据(类或方法)之间没有分离,
因此很难使用另外的哈希算法进行替换。同时,Java 内建的哈希算法生成的 Hash 值是十分劣质的,有一部分原因是因为他们依赖于劣质的 Hashcode 实现,其中包括很多 JDK 中的实现类。

Java 中 Object.hashCode 运行十分快速,但是缺乏对 哈希碰撞 问题的预防,同时也缺乏对散列值的期望。这种特性却让他十分适合与应用在哈希表中,因为额外的哈希碰撞只会
带来很小的性能损失,同时十分差劲的分散性可以采用二次哈希的方法解决(Java 中几乎所有
合理的哈希算法(哈希函数)都采用这种方法进行实现)。然而,在简单哈希表之外的很多哈希应用中,
Object.hashCode却是不足的,因此com.google.common.hash包被设计出来。

Organization (组成)

通过查看包的 Java doc 文档, 我们会发现很多不同的类,但是并没有明显的说明他们是如何协同工作的。

让我们先看一下这个类库的一部分代码:

HashFunction hf = Hashing.md5();
HashCode hc = hf.newHasher()
       .putLong(id)
       .putString(name, Charsets.UTF_8)
       .putObject(person, personFunnel)
       .hash();
HashFunction (哈希方法–生成Hash值的方法)

[HashFunction] 是一个对引用透明的、无状态(无返回值)的方法,他把任意的数据块映射到固定长度的地址中,
尽量确保相同的输入一定产生相同的输出ÿ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值