Google guava项目简单介绍

工具类
placeholder image
admin 发布于:2022-07-14 22:08:51
阅读:loading

任何一个单位,任何一个项目都应该有自己的工具类集,可以或多或少,因为的各个项目中都会存在一些工具类,比如Apache Commons Lang是Apache开源的工具项目,同时Spring Core模块中也存在较多的工具类,本文则简单的整理一下Google提供的开源工具项目Guava,介绍一下Guava提供的知识点以及个人常用的一些工具类,总结的比较浅显。

Guava 是一组来自 Google 的核心 Java 库,存在的意义与Apache Commons Lang项目一致,包括了不限于新的集合类型(例如 multimap 和 multiset)、不可变集合、图形库以及用于并发、I/O、散列、缓存、原语、字符串等的实用程序,它广泛用于 Google 内部的大多数 Java 项目,也被许多其他公司广泛使用。本篇文章特将个人以为值得去学习了解和实际应用的一些知识点整理汇总,详细如下:

模块类名说明









base基本

Ascii定义了有30多个byte类型的数字(0-32和127),部分时候可被用作为常量
CaseFormat提供了变量命名的转换,如将驼峰命名转换为匈牙利命名(互相转换);将变量命名转换为中横线分割;
BooleanUtils字符串与Boolean类型的互相转换与验证
CharsetsUTF-8和ISO-8859-1等字符编码的常量定义
Defaults定义8种基本类型变量的默认值,分别是:boolean、char、byte、short、int、long、float、double,其它一律返回null
Enums内置缓存的方式存储枚举示例,提供对枚举的示例访问
Objects提供工具函数equals和hashCode的实现
StandardSystemPropertyJDK标准的系统属性定义,可使用其内部定义的各种内置属性名的定义和属性的数据获取封装实现
Stopwatch程序执行计时器,用于记录代码的间隔执行耗时事件,可将时间差转换为不同的时间单位,如:秒、分、时等。Apache Commons Lang3项目和Spring Core项目模块也都有提供此类的不同实现,具体使用时可选择性使用,毕竟API的调用细节是有区别的
Strings
字符串工具类,将null转为empty字符串互转,判断null或empty、字符串左右补充文本、字符串反转、两个字符串的公共前缀和后缀匹配、字符串格式化、null转换"null"等,具体实际的应用还是应该与Apache Commons Lang3项目结合
Throwables抛出异常的工具方法封装
Utf8提供获取utf-8文本的长度获取、utf-8部分字符串的文本长度获取、判断是否是utf-8编码的字节数组
cache缓存模块guava.cacheGuava cache并不是一个独立的项目组件,而是其中的一个模块,是本地JVM缓存的实现,笔者未实际应用过此缓存实现,所以对于它的实现以及优劣对比直接跳过,若需使用或者想深入了解可自行研究。
collect集合增强
Lists
创建List的实现类,如ArrayList等,可以直接通过Lists类中提供的静态方法直接构造集合的实现类,并且可提供默认的数据,避免直接通过new的方式创建,同时某些场景使用时手动add一些数据。
Sets同上,取集合的交集、并集、差集
Queues构造各种队列,特别强调drain之类的方法,属于生产者消费者模式的数据消费,提供了两种队列消费策略,当队列中超过N条数据时分段拿走消费,当队列中数据不超过N条时,采用时间定时超过的消费策略。
Maps同Lists
BiMap

有多个Map实现类,如ImmutableBiMap、EnumBiMap、HashBiMap等,ImmutableBiMap可以创建多种不同的Map实现,下列简单的几种实现介绍:

(1)SingletonImmutableBiMap只允许构造时存储一个key和value,几乎所有的方法都给标记为过期,且直接抛出异常(这属于是最简单的一款自定义Map实现了);

(2)RegularImmutableBiMap允许存储多个key和value,key和value均不能重复,同属于ImmutableBiMap类的封装实现,其它特性同上;

(3)HashBiMap的key重复时会被覆盖,不允许value重复,使用key与value的双hash能够保持数据存储时的先后顺序;

HashMultimap可重复存储数据的Map,内部Value存储使用了Collection类型来存储数据,所以当某个key重复出现时,会将数据追加至Collection的末尾,实现key值的可重复存储。另有ImmutableMultiset等多种类型可供参考。
io流ByteStreams提供使用字节数组和输入/输出流的实用方法。
CharStreams提供使用字符流的实用方法。
Closeables使用可关闭对象的实用方法。
Files提供使用文件的实用方法。
net网络
HttpHeaders包含HTTP标头字段名的常量定义,非常全面可以直接作为静态常量使用。
InetAddresses只处理IP地址字符串文本时,应该尽可能地使用这些方法,而不是JDK等效方法。
MediaType表示Internet媒体类型,可构造各种类型的请求类型和响应,也可以参考Spring中提供的该类。
concurrentguava.util.concurrentjuc是Java提供的并发工具包,同此处的guc一样,是Guava中提供的并发工具包,各种高大上的实现有待大家去深入实践。

工具库以及工具类的深度与广度都是不断积累的,在日常工作应用中除了本文中提供的Google Guava工具库以外,还应该尽量的使用Apache Commons的各种公共项目以及Spring Core中提供的各种工具类,同时项目中使用其他第三方的jar中也可能会存在各式各样的工具类,再有就是自己项目中同样存在,过多或全面的去了解它们,可让我们在工作中显得毫不费力并且显得更高大上。

 点赞


 发表评论

当前回复:作者

 评论列表


留言区