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

【吐血整理】想学Google Guava看这篇就够了「建议收藏」GoogleGuava常用功能梳理,想学习Guava的看过来

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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.net/200846.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深圳有哪些不错的互联网公司_深圳好公司推荐

    深圳有哪些不错的互联网公司_深圳好公司推荐深圳作为一个一线城市,改革开放已经40余年了,即使如此,栈长觉得深圳现在也还是一个非常年轻的城市,不断吸引着大批外省务工人员。深圳不仅是一个包容度很高的城市,也是一个互联网公司扎堆的城市,今天栈

    2022年8月6日
    4
  • HD地址批量生成 java

    HD地址批量生成 java前言:HD钱包全称为是分层确定性(HierarchicalDeterministic)钱包的缩写HDWallets。首次创建HD钱包或者备份钱包时,会产生一个助记词,助记词是一连串的英⽂单词,这一串单词序列就可以创建种子,种子又可以创建所有的私钥。单词顺序也是钱包的备份,可以恢复钱包。而种⼦对应的就是所确定性钱包的随机数。HD钱包的优点在于只需要主公钥,…

    2022年7月8日
    44
  • vb6.0连接access数据库_access数据库是什么型数据库

    vb6.0连接access数据库_access数据库是什么型数据库第一步:在stdafx.h头文件中加入#import”c:\programfiles\commonfiles\system\ado\msado15.dll”no_namespacerename(“EOF”,”adoEOF”),rename(“BOF”,”adoBOF”)第二步:初始化COM库子main函数中CoInitialize(NULL); CoUninitialize

    2022年8月12日
    6
  • python字符串删除指定字符「建议收藏」

    python字符串删除指定字符「建议收藏」python字符串中去除指定字符或字符串:1,Pythonstrip()方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。2,Pythonreplace()方法把字符串中的old(旧字符串)替换成new(新字符串),如果指定第三个参数max,则替换不超过max次。参考链接:https://blog.csdn.net/qq_31672701/article/details/100927305…

    2022年5月1日
    701
  • matlabfor循环产生矩阵_matlab形成矩阵

    matlabfor循环产生矩阵_matlab形成矩阵参考:http://www.ilovematlab.cn/thread-101148-1-1.html这个ok:clc;clear;h=[10987654321];size=length(h);t=zeros(1,size);t(1)=h(1);t(1,2:size)=h(size:-1:2);H=toeplitz(h,t)这个也ok:clc;clear;h=[109…

    2022年10月7日
    5
  • 高并发下的nginx性能优化实战

    高并发下的nginx性能优化实战

    2022年2月13日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号