前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【吐血整理】想学Google Guava看这篇就够了「建议收藏」

【吐血整理】想学Google Guava看这篇就够了「建议收藏」

作者头像
全栈程序员站长
发布2022-11-01 15:31:33
1.9K0
发布2022-11-01 15:31:33
举报
文章被收录于专栏:全栈程序员必看

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类库的一个总结,它包括了我们平常开发中最常用的一些组件工具类,熟练掌握这些工具类的使用方法,必然会让你的工作如虎添翼~

如果感觉对你有些帮忙,请收藏好,你的关注和点赞是对我最大的鼓励! 如果想跟我一起学习,坚信技术改变世界,请关注Java天堂公众号,我会定期分享自己的学习成果,第一时间推送给您

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Guava不可变集合
  • 2、Guava新的集合类型
  • 3、Guava超实用的集合工具类
  • 4、Guava本地缓存Cache
  • 5、Guava强大的String工具类
  • 6、Guava限流RateLimiter
  • 7、Guava发布/订阅EventBus
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档