Guava学习笔记(一)概览

Guava是谷歌开源的一套Java开发类库,以简洁的编程风格著称,提供了很多实用的工具类,

在之前的工作中应用过Collections API和Guava提供的Cache,不过对Guava没有一个系统的了解,

为了更好的应用,准备好好学习一下这个优秀的开源工具包。

Guava主页:https://github.com/google/guava

以下内容来自Guava—Wiki

>>关于Guava

Guava项目包含了谷歌在基于Java的项目中依赖的几个Google核心库:集合,缓存,原语支持,并发库,常见注释,字符串处理,I / O等。

这些工具每天都被Google员工在生产服务中使用。

>>类库说明手册

(1)基本工具类:让使用Java语言更令人愉悦

1. 使用和避免 null:null 有语言歧义, 会产生令人费解的错误, 反正他总是让人不爽。很多 Guava 的工具类在遇到 null 时会直接拒绝或出错,而不是默默地接受他们。
2. 前提条件:更容易的对你的方法进行前提条件的测试。
3. 常见的对象方法: 简化了Object常用方法的实现, 如 hashCode() 和 toString()。
4. 排序: Guava 强大的 "fluent Comparator"比较器, 提供多关键字排序。
5. Throwable类: 简化了异常检查和错误传播。

(2)集合类

集合类库是 Guava 对 JDK 集合类的扩展, 这是 Guava 项目最完善和为人所知的部分。
1. Immutable collections(不变的集合): 防御性编程, 不可修改的集合,并且提高了效率。
2. New collection types(新集合类型):JDK collections 没有的一些集合类型,主要有:multisets,multimaps,tables, bidirectional maps等等
3. Powerful collection utilities(强大的集合工具类): java.util.Collections 中未包含的常用操作工具类
4. Extension utilities(扩展工具类):给 Collection 对象添加一个装饰器还是实现迭代器? 我们可以更容易的实现这些。

(3)缓存

本地缓存,可以很方便的操作缓存对象,并且支持各种缓存失效行为模式。

(4)Functional idioms(函数式)

简洁, Guava实现了Java的函数式编程,可以显著简化代码。

(5)Concurrency(并发):强大,简单的抽象,让我们更容易实现简单正确的并发性代码

1. ListenableFuture(可监听的Future): Futures,用于异步完成的回调。
2. Service: 控制事件的启动和关闭,为你管理复杂的状态逻辑。

(6)Strings
一个非常非常有用的字符串工具类: 提供 splitting,joining, padding 等操作。

(7)Primitives
扩展 JDK 中未提供的对原生类型(如int、char等)的操作, 包括某些类型的无符号的变量。

(8)Ranges
Guava 一个强大的 API,提供 Comparable 类型的范围处理, 包括连续和离散的情况。

(9)I/O

简化 I/O 操作, 特别是对 I/O 流和文件的操作, for Java 5 and 6。

(10)Hashing

提供比 Object.hashCode() 更复杂的 hash 方法, 提供 Bloom filters。

(11)EventBus

基于发布-订阅模式的组件通信,但是不需要明确地注册在委托对象中。

(12)Math
优化的 math 工具类,经过完整测试。

(13)Reflection
Guava 的 Java 反射机制工具类。

>>Guava的哲学

Guava可以使Java项目的开发效率成倍提高:我们的目标是使Java语言的工作更加愉快和更高效。

Guava中的JDK实用程序,例如 Collections API已被广泛采用,并且显着简化了所有Java代码。 我们希望继续这种传统。

时间: 2024-10-25 13:36:23

Guava学习笔记(一)概览的相关文章

Guava学习笔记:Google Guava 类库简介

> Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦.下面我们就开启优雅Java编程学习之旅! 项目相关信息: 官方首页:http://code.googl

Guava学习笔记:Multimaps

Guava学习笔记:Multimaps 有时候我们需要这样的数据类型Map<String,Collection<String>>,guava中的Multimap就是为了解决这类问题的. Multimap的实现 Multimap提供了丰富的实现,所以你可以用它来替代程序里的Map<K, Collection<V>>,具体的实现如下: 实现 Key实现 Value实现 ArrayListMultimap HashMap ArrayList HashMultima

Guava学习笔记:guava中的Preconditions使用

Guava学习笔记:guava中的Preconditions使用 转载:http://outofmemory.cn/java/guava/base/Preconditions google guava的base包中提供的Preconditions类用来方便的做参数的校验,他主要提供如下方法: checkArgument 接受一个boolean类型的参数和一个可选的errorMsg参数,这个方法用来判断参数是否符合某种条件,符合什么条件google guava不关心,在不符合条件时会抛出Illeg

Guava学习笔记: guava集合之Multiset

Guava学习笔记: guava集合之Multiset Multiset是什么? Multiset看似是一个Set,但是实质上它不是一个Set,它没有继承Set接口,它继承的是Collection<E>接口,你可以向Multiset中添加重复的元素,Multiset会对添加的元素做一个计数. 它本质上是一个Set加一个元素计数器. Multiset使用示例: package cn.outofmemory.guava.collection; import com.google.common.ba

Guava学习笔记: BiMap

Guava学习笔记: BiMap 我们知道Map是一种键值对映射,这个映射是键到值的映射,而BiMap首先也是一种Map,他的特别之处在于,既提供键到值的映射,也提供值到键的映射,所以它是双向Map. 想象这么一个场景,我们需要做一个星期几的中英文表示的相互映射,例如Monday对应的中文表示是星期一,同样星期一对应的英文表示是Monday.这是一个绝好的使用BiMap的场景. package cn.outofmemory.guava.collection; import com.google.

Guava学习笔记:guava中对字符串的操作

Guava学习笔记:guava中对字符串的操作 转载:http://outofmemory.cn/java/guava/base/Strings 在google guava中为字符串操作提供了很大的便利,有老牌的判断字符串是否为空字符串或者为null,用指定字符填充字符串,以及拆分合并字符串,字符串匹配的判断等等. 下面我们逐一了解这些操作: 1. 使用com.google.common.base.Strings类的isNullOrEmpty(input)方法判断字符串是否为空        

Guava学习笔记:guava的不可变集合

Guava学习笔记:guava的不可变集合 不可变集合的意义 不可变对象有很多优点,包括: 当对象被不可信的库调用时,不可变形式是安全的: 不可变对象被多个线程调用时,不存在竞态条件问题 不可变集合不需要考虑变化,因此可以节省时间和空间.所有不可变的集合都比它们的可变形式有更好的内存利用率(分析和测试细节): 不可变对象因为有固定不变,可以作为常量来安全使用. 创建对象的不可变拷贝是一项很好的防御性编程技巧.Guava为所有JDK标准集合类型和Guava新集合类型都提供了简单易用的不可变版本. 

Guava学习笔记: guava中的对象封装操作

Guava学习笔记: guava中的对象封装操作 转载:http://outofmemory.cn/java/guava/base/Objects 我们在开发中经常会需要比较两个对象是否相等,这时候我们需要考虑比较的两个对象是否为null,然后再调用equals方法来比较是否相等,google guava库的com.google.common.base.Objects类提供了一个静态方法equals可以避免我们自己做是否为空的判断,示例如下:         Object a = null;  

Guava学习笔记:guava Throwables帮你处理异常,抛出异常

Guava学习笔记:guava Throwables帮你处理异常,抛出异常 guava类库中的Throwables提供了一些异常处理的静态方法,这些方法的从功能上分为两类,一类是帮你抛出异常,另外一类是帮你处理异常. 也许你会想:为什么要帮我们处理异常呢?我们自己不会抛出异常吗? 假定下面的方法是我们要调用的方法.     public void doSomething() throws Throwable {         //ignore method body     }     pub

[Guava学习笔记]Collections: 不可变集合, 新集合类型

不可变集合 不接受null值. 创建:ImmutableSet.copyOf(set); ImmutableMap.of(“a”, 1, “b”, 2); public static final ImmutableSet<Color> GOOGLE_COLORS = ImmutableSet.<Color>builder() .addAll(WEBSAFE_COLORS) .add(new Color(0, 191, 255)) .build(); 可以有序(如ImmutableS