guava零碎知识点

本文介绍了Guava库中的一些实用工具类,包括使用Hashing创建不同类型的Hash函数,如校验总和哈希、一般哈希和密码哈希;详细讲解了Bloom Filter的工作原理及其创建;探讨了Optional类如何处理可能的null值问题;最后,总结了Throwables类在处理异常链和获取根异常上的帮助。这些知识点虽然不常使用,但在特定场景下能大大提高代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Guava 的一些小功能点

我们已经到了书的最后一章,但是任然感觉还有很多东西没有覆盖到。虽然在这么短的篇幅里我们不可能覆盖到guava的多有功能,但是我们已经尽力了。 这一章我们将介绍一些没有必要单独一章介绍的一些小的工具类,虽然他们不是天天不用到,但是一旦用到,你就会发现真的非常方便. 这一章我们将学习一下的几个知识点:
1. Hashing 类: 通过Hashing类的静态工具方法我们可以获取HashFunction 实例
2. 布隆过滤: Bloom 过滤这样的数据结构,可以明确返回一个数据不存在,但是不能确保一个元素肯定存在.当存在Hash碰撞时有可能误判。
3. Optional类: Optional 类可以让我们选择使用 null 的引用
4. Throwables类: Throwables 类中有静态工具方法可以与Throwable协作

创建合适的Hash函数

Hash函数是确定对象身份标识和确定是否重复的基础,同时它也是合理使用java结合的必备条件。 Hash函数的基本工作方式: 将对象数据映射为数字。 因此我们希望避免将不同的数据生成相同的数字,毋庸置疑,写一个优秀的Hash函数的工作就留给那些专家吧, 但是幸运的是,在Guava的帮助下我们不需要自己去写Hash函数, Hashing类提供了一些静态方法可以创建HashFunction的实例。

校验总和哈希函数

Guava 提供了两种实现了checksum算法的HashFunction,分别是Adler-32 和 CRC-32,创建这两个HashFunction 可以按照如下的方法:

HashFunction adler32 = Hashing.adler32();
HashFunction crc32 = Hashing.crc32();

这里我们可以简单的使用Hashing函数的静态方法去获取想要的实例.

一般哈希函数

下面我们将看一下一般的hash函数,一般的hash函数是不带加密语义,非常适合基于Hash的查找类任务。 第一个要介绍的就是 murmur Hash,这是一个在2008年由Austin发现的。 其他的一般性hash算法叫做GooFastHash。 下面让我们看下怎样创建这些一般性Hash函数:

HashFunction gfh = Hashing.goodFastHash(128);
HashFunction murmur3_32 = Hashing.murmur3_32();
HashFunction murmur3_128 = Hashing.murmur3_128();

上面的例子中我们使用GoodFastHash算法返回一个最小包含128长度bit位,一个字节包含8个bit位,因此调用GoodFastHash至少返回16个字节(128/8).接下来我们创建了两个murmur实例的Hash. 第一个是实现了32-bit的murmur3_32算法,第二个murmur Hash实例实现了128bit murmur3_128算法。

密码哈希函数

虽然完整的讨论密码哈希函数超出了本书的返回,但是简单的说密码哈希函数就是为了保证数据的安全。 一般来说,密码哈希函数有一些如下的属性:
– 一点小的数据改变,就会导致HashCode发生很大的变化
– 在理论上,通过hash code 反推出原始数据是什么是不可能的。

下面Guava提供了创建密码哈希函数的变体:

HashFunction sha1 = Hashing.sha1();
HashFunction sha256 = Hashing.sha256();
HashFunction sha512 = Hashing.sha
Guava Cache是Google的Guava库中的一个重要组成部分,它提供了一种高效的缓存解决方案。Cache在软件设计中用于存储数据,以减少对数据库或其他慢速资源的访问次数。以下是使用Guava Cache的基本步骤和一些关键知识点: 1. **创建缓存实例**: 使用`LoadingCache<Key, Graph>`或`Cache<Key, Graph>`来初始化,其中Key是缓存键,Graph是缓存值。你可以选择是否开启加载机制(即在第一次访问时自动填充数据),并设置容量限制。 ```java LoadingCache<Key, Graph> graphCache = CacheBuilder.newBuilder() .maximumSize(100) // 设置最大缓存大小 .expireAfterWrite(5, TimeUnit.MINUTES) // 设置过期时间 .build( new CacheLoader<Key, Graph>() { @Override public Graph load(Key key) throws AnyException { return createExpensiveGraph(key); // 创建数据的函数 } }); ``` 2. **获取、存储和删除**: - `get(key)`:尝试从缓存中获取数据,如果不存在则根据CacheLoader回填。 - `put(key, value)`:将数据放入缓存。 - `remove(key)`:移除指定键的数据。 - `clear()`:清除整个缓存。 3. **缓存替换策略**: Guava提供了多种替换策略,如`LRU`, `LFU`(Least Frequently Used), 和`Weigher`自定义权重替换等。 4. **事件监听**: 可以通过`LoadingCache`的事件处理器监听缓存填充、成功或失败事件。 5. **并发和线程安全性**: Guava Cache本身是线程安全的,所以可以在多线程环境中直接使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值