网站首页 > 博客文章 正文
Guava是谷歌提供的一个核心Java类库,其中包括新的集合类型、不可变集合、图库,以及用于并发、I/O、Hash、缓存、字符串等的 实用工具。它在谷歌中的大多数Java项目中被广泛使用,也被许多其他公司广泛使用,熟练掌握这些工具类能帮助我们快速的处理日常开发中的一些问题,比如,不可变集合、集合的转换、字符串处理、本地缓存等
最近一段时间,我把Guava中常用到的工具类学了一遍,感觉有些工具类还是挺有用的,至少它帮你封装了很多功能,让你在处理一些逻辑的时候,不用太关注细节,把Guava的工具类直接拿来用就好了。下面我就介绍一下Guava中最常用的一些工具:
1、Guava不可变集合
不可变集合就是集合创建之后元素是不可改变的,主要用途如下:
- 不可变对象提供给别人使用时是安全的,因为不可变,所有人都无法进行修改,只能读
- 支持多个线程调用,不存在竞争的问题,天然支持多线程
- 不可变集合节省内存空间,因为不可变,集合空间在创建时就已经确定好了,不用考虑扩容等问题,内存利用率高
- 不可变集合可用于常量
Guava针对常用的集合类型List、Set、Map等都提供了不可变类型的集合
详细使用方法,可查看另一篇文章Guava系列之不可变集合
2、Guava新的集合类型
Guava提供了几种新的集合类型,补充了JDK中的集合类型 比如我们要统计List中某个元素出现的次数,如果使用JDK中的list就需要使用循环遍历进行统计,但使用了Guava的Multiset就可以直接统计出来元素出现的次数
再比如,我们要通过Map中的key查找value,通过value来查找值,也就是需要一个双向Map,如果使用JDK中的Map,我们需要维护两个Map,一个从key映射到value,另外一个从value映射到key,而且不管是新增还是修改Map中的元素,都要保持两个Map同步修改,维护成本太高了,使用Guava的BiMap可以通过一个Map轻松解决这个问题
更多新集合类型请查看Guava系列之新的集合类型
3、Guava超实用的集合工具类
JDK中集合的操作已经提供了很多工具类,比如基本的集合交集、并集、差集这些常用的操作,Guava中提供的工具类是对JDK的补充,在Guava中提供了静态的创建集合的方法,还有集合的很多操作,比如笛卡尔集、list反转、排列组合、Set转Map、Map的各种过滤等
新集合工具类的详细使用,请查看Guava系列之超实用的集合工具类
4、Guava本地缓存Cache
Guava中的缓存是本地缓存的实现,与ConcurrentMap相似,但不完全一样。最基本的区别就是,ConcurrentMap会一直保存添加进去的元素,除非你主动remove掉。而Guava Cache为了限制内存的使用,通常都会设置自动回收
Guava Cache的使用场景:
- 以空间换取时间,就是你愿意用内存的消耗来换取读取性能的提升
- 你已经预测到某些数据会被频繁的查询
- 缓存中存放的数据不会超过内存空间
Guava Cache的详细使用方法,可查看Guava系列之Cache
5、Guava强大的String工具类
String是我们平时开发工作当中使用最频繁的类型, Guava提供了字符串的连接、分隔等操作,特别是字符串的匹配,那是相当强大,比如提取出字符串中的字母、数字、特殊字符等,可以从指定字符串中提取、删除、替换等操作
举个例子,提取“er 3j6o 3k ,)$ wt@ wr4576je ow3453535345irjew jwfel ” 字符串的字母,直接可以调用现成的方法
再比如,你需要将上述字符串中的数字全部移除或替换成其他字符,都有现成的方法,使用起来非常方便,只要你使用好了这些工具类,
可以大大提升你对字符串的处理效率
具体详细用法,请查看Guava系列之String工具类
6、Guava限流RateLimiter
在互联网高并发场景下,限流是用来保证系统稳定性的一种手段,当系统遭遇瞬时流量激增时,可能会由于系统资源耗尽导致宕机。而限流可以把一小部分流量拒绝掉,保证大部分流量可以正常访问,从而保证系统只接收承受范围以内的请求,多余的请求给拒绝掉
我们常用的限流算法有:漏桶算法、令牌桶算法
Guava中的限流使用的是令牌桶算法,RateLimiter提供了两种限流实现
- 平滑突发限流(SmoothBursty)
- 平滑预热限流(SmoothWarmingUp)
Guava RateLimiter的详细用法,请查看Guava系列之限流RateLimiter
7、Guava发布/订阅EventBus
EventBus是Guava中实现的用于发布/订阅模式的事件处理组件,它是设计模式中观察者模式的优雅实现
EventBus是消息总线,它会根据消息的类型发送到指定的消息订阅者,当有消息没有订阅者接收时,会将消息发送给DeadEvent
关于EventBus的详细用法,请查看Guava系列之EventBus
以上是对最近学习Guava类库的一个总结,它包括了我们平常开发中最常用的一些组件工具类,熟练掌握这些工具类的使用方法,必然会让你的工作如虎添翼~
猜你喜欢
- 2025-06-13 只需在注册表中新建一个值,就可以禁用键盘上的大写锁定键
- 2025-06-13 MapStruct架构设计(maps模块)
- 2025-06-13 轻松解读源码系列之Java集合接口&抽象类(1)—Map和Collection
- 2025-06-13 宇宙厂:WeakMap 和 WeakSet 和垃圾回收器有什么关系?
- 2025-06-13 Seata源码—4.全局事务拦截与开启事务处理二
- 2025-06-13 rust map与c++区别(rust c++ 性能比较)
- 2025-06-13 QMap的说明和简单使用(qmap和qhash)
- 2025-06-13 Map的几种遍历方式(map的三种遍历方式js)
- 2025-06-13 Go语言映射(Map)类型详解(go中的map)
- 2025-06-13 golang笔试题(golang面试参考手册)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)