guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用

时间:2022-06-14 05:13:12

让我们来熟悉瓜娃,并体验下它的一些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));