让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分:
Introduction
Guava Collection API
Guava Basic Utilities
IO API
Cache API
2,为神马选择瓜娃?
瓜娃是java API蛋糕上的冰激凌(精华)
高效设计良好的API.
被google的开发者设计,实现和使用。
遵循高效的java这本书的好的语法实践。
使代码更刻度,简洁,简单。
使用java 1.5的特性,
流行的API,动态的开发
它提供了大量相关的应用类,集合,多线程,比较,字符串,输入输出,缓存,网络,原生类型,数学,反射等等
百分百的单元测试,被很多的项目使用,帮助开发者专注业务逻辑而不是写java应用类
节省时间,资源,提高生产力
我的目的是为基本的java特征提供开源代码的支持,而不是自己再写一个
Apache Common库-Apache是一个很好的成熟的库,但是不支持泛型,Apache对早起的java版本很有用,(1.5之前的)
java7,java8 最新的java支持一些guava的API
guava最新的正式版本是14.0-rc2,这个版本需要java1.6支持.
最新的maven坐标是:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>14.0-rc2</version>
</dependency>
3,集合API的使用
3.1简化工作
可以简化集合的创建和初始化;
类别 原来的写法 guava的写法集合创建
Map<String, Map<String, String>> map = new HashMap<String, Map<String,String>>();
List<List<Map<String, String>>> list = new ArrayList<List<Map<String,String>>>();
Map<String, Map<String, String>> map = Maps.newHashMap();
List<List<Map<String, String>>> list = Lists.newArrayList();
//1,简化集合的创建
List<Person> personList= Lists.newLinkedList();
Set<Person> personSet= Sets.newHashSet();
Map<String,Person> personMap= Maps.newHashMap();
Integer[] intArrays= ObjectArrays.newArray(Integer.class,10);
集合初始化
Set<String> set = new HashSet<String>();
set.add("one");
set.add("two");
set.add("three");
Set<String> set = Sets.newHashSet("one","two","three");
List<String> list = Lists.newArrayList("one","two","three");
Map<String, String> map = ImmutableMap.of("ON","TRUE","OFF","FALSE");
//2,简化集合的初始化
List<Person> personList2= Lists.newArrayList(new Person(1, 1, "a", "46546", 1, 20),
new Person(2, 1, "a", "46546", 1, 20));
Set<Person> personSet2= Sets.newHashSet(new Person(1,1,"a","46546",1,20),
new Person(2,1,"a","46546",1,20));
Map<String,Person> personMap2= ImmutableMap.of("hello",new Person(1,1,"a","46546",1,20),"fuck",new Person(2,1,"a","46546",1,20));
3.2 不变性
很大一部分是google集合提供了不变性,不变对比可变:
数据不可改变
线程安全
不需要同步逻辑
可以被*的共享
容易设计和实现
内存和时间高效
不变对比不可修改
google的不变被确保真正不可改变,而不可修改实际上还是可以修改数据;如下所示:
Set<Integer> data = new HashSet<Integer>();
data.addAll(Arrays.asList(10, 20, 30, 40, 50, 60, 70, 80));
Set<Integer> fixedData = Collections.unmodifiableSet(data); // fixedData - [50, 70, 80, 20, 40, 10, 60, 30]
data.add(90); // fixedData - [50, 70, 80, 20, 40, 10, 90, 60, 30]
如何创建不可变的集合:
ImmutableSet<Integer> numbers = ImmutableSet.of(10, 20, 30, 40, 50);
使用copyOf方法
ImmutableSet<Integer> another = mmutableSet.copyOf(numbers);
使用Builder方法
ImmutableSet<Integer> numbers2 = ImmutableSet.<Integer>builder().addAll(numbers) .add(60) .add(70).add(80).build();
//3,创建不可变的集合
ImmutableList<Person> personImmutableList=
ImmutableList.of(new Person(1, 1, "a", "46546", 1, 20), new Person(2, 1, "a", "46546", 1, 20));
ImmutableSet<Person> personImmutableSet=ImmutableSet.copyOf(personSet2);
ImmutableMap<String,Person> personImmutableMap=ImmutableMap.<String,Person>builder()
.put("hell",new Person(1,1,"a","46546",1,20)).putAll(personMap2) .build();
3.3 新的集合类型
The Guava API provides very useful new collection types that work very nicely with existing java collections.
guava API 提供了有用的新的集合类型,协同已经存在的java集合工作的很好。
分别是 MultiMap, MultiSet, Table, BiMap, ClassToInstanceMap
种类 写的例子MultiMap
一种key可以重复的map,子类有ListMultimap和SetMultimap,对应的通过key分别得到list和set
Multimap<String, Person> customersByType =ArrayListMultimap.create();customersByType.put("abc", new Person(1, 1, "a", "46546", 1, 20));