Guava-学习

我们两清 提交于 2020-03-06 16:12:16

学习准备

源码地址:https://github.com/google/guava
API地址:https://guava.dev/releases/snapshot-jre/api/docs/
学习方式:1、根据github说明使用 。2、下载源码,研究里面的测试例子。3、查看API里面的例子。

中文地址:https://ifeve.com/google-guava/

概念说明-github网页翻译

Guava是Google的一组核心Java库,其中包括新的集合类型(例如多图和多集),不可变的集合,图形库以及用于并发,I / O,哈希,缓存,基元,字符串等的实用程序!它广泛用于Google的大多数Java项目中,也被许多其他公司广泛使用。
JRE版本需要JDK 1.8或更高版本。
Guava的好处
标准化 - Guava库是由谷歌托管。
高效 - 可靠,快速和有效的扩展JAVA标准库
优化 - Guava库经过高度的优化。

   1. 函数式编程 -增加JAVA功能和处理能力。
   2. 实用程序 - 提供了经常需要在应用程序开发的许多实用程序类。
   3. 验证 -提供标准的故障安全验证机制。
   4. 最佳实践 - 强调最佳的做法。

包含内容

一、基本工具
二、新集合类型
三、不可变集合
四、强大的集合工具
五、函数式编程
六、字符串处理
七、并发编程
八、原生类型
九、区间
十、缓存
十一、数学运算
十二、散列

使用-根据github说明

Adding Guava to your build
To add a dependency on Guava using Maven, use the following:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>28.2-jre</version>
  <!-- or, for Android: -->
  <version>28.2-android</version>
</dependency>

常用类记忆

base包

类名 作用
Joiner 连接器 Joiner用于将字符串序列通过指定的分隔符连接起来
Splitter 拆分器 字符串拆分
CaseFormat 大小写规范间转换字符串
Strings 字符串

集合包
 Guava在现有的JDK集合中有新增了Multiset、Multimap、BiMap、Table、ClassToInstanceMap、RangeSet、RangeMap等新集合。这些新集合能够跟JDK集合框架共存,并遵循JDK接口契约。所有新集合的构造器都进行了私有化处理,并通过静态函数生成实例。
 一、Multiset
    Multiset多用于统计元素个数,例如统计一个句子中相同字母的个数。传统的方法就是依次遍历存储在Map<String, Integer>中,最后迭代输出,而有了Multiset,只需将字母传入构造器中,就会自动统计出来。
二、Mulitimap
    Multimap对map提供了一对多的方式,也就是说一个键可对应多个值,相当于Map<K, List>或Map<K, Set>的格式,因此通过get(K)获得的结果是以集合的形式返回,即使没有对应的值,也会返回空集合,不存在null的情况。【相当于Map<K, List>或Map<K, Set>的格式】
三、BiMap
    BiMap用于实现键值对的双向映射。当然也可以维护两个Map,但这样的操作太不方便了,而且极易出错。【特点:键值的唯一性】
四、Table
    第二节中的Multimap用于简化Map<K, Collection>的形式,但对于Map<R, Map<C, V>>这种格式的就需要用到Table来简化了。【类似二维数组,等同于Map<R, Map<C, V>>】

集合接口 属于JDK还是Guava 对应的Guava工具类
Collection JDK Collections2不要和java.util.Collections混淆
List J DK Lists
Set JDK Sets
SortedSet JDK Sets
Map JDK Maps
SortedMap JDK Maps
Queue JDK Queues
Multiset Guava Multisets
Multimap Guava Multimaps
BiMap Guava Maps
Table Guava Tables

【不可变集合】
    不可变集合就是在初始化时定义好数据,在之后的使用过程中不能再修改的集合。Guava对所有的JDK集合类型和新集合类型都封装了对应的不可变集合。但需要注意的是,所有Guava不可变集合的实现都不接受null值。
ImmutableXXX。

【并发编程】
    并发编程是一个难题,但是一个强大而简单的抽象可以显著的简化并发的编写。出于这样的考虑,Guava 定义了 ListenableFuture 接口并继承了JDK concurrent包下的 Future 接口。Guava强烈建议在代码中多使用 ListenableFuture 来代替JDK的 Future, 因为:
● 大多数 Futures 方法中需要它。
● 转到 ListenableFuture 编程比较容易。
● Guava提供的通用公共类封装了公共的操作方方法,不需要提供Future和ListenableFuture的扩展方法。

【缓存】
    缓存在很多场景下都是相当有用的。例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存。Guava Cache与ConcurrentMap很相似,但也不完全一样。最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除。相对地,Guava Cache为了限制内存占用,通常都设定为自动回收元素。在某些场景下,尽管 LoadingCache不回收元素,它也是很有用的,因为它会自动加载缓存。

通常来说,Guava Cache适用于:
● 你愿意消耗一些内存空间来提升速度。
● 你预料到某些键会被查询一次以上。
● 缓存中存放的数据总量不会超出内存容量。

代码练习

解析网站图片并下载到本地。
字符串,并发,集合,

资料阅读:

为什么强烈推荐Java程序员使用Google Guava编程

Guave-并发编程网

[Guava] Google Guava 集合工具类

Guava用法总结

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!