Google Guava 类库简介
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 对集合Collection、缓存Cache、原生数据类型支持、并发库、通用注解、字符串处理和IO工具,都提供了高效的支持.这些高质量的 API 可以使你的java代码更加优雅,更加简洁,本文详细介绍一下Guava 高质量API使用大全。
具体使用细节可以参考官方文档:http://docs.guava-libraries.googlecode.com/git/javadoc
集合
针对可变集合的声明
Map<String, Map<Long, List<String>>> java = new HashMap<String, Map<Long,List<String>>>();
Map<String, Map<Long, List<String>>> guava = Maps.newHashMap();
针对不可变集合
List<String> list = new ArrayList<String>();
list.add("java"); list.add("b"); list.add("c"); list.add("d");
ImmutableList<String> of = ImmutableList.of("guava", "b", "c", "d");
ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");
集合接口 | 属于JDK还是Guava | 对应的Guava工具类 |
Collection | JDK | Collections2:不要和java.util.Collections混淆 |
List | JDK | 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 |
缓存
maven依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
Guava Cache 原理解析
final static Cache<Integer, String> cache = CacheBuilder.newBuilder()
//设置cache的初始大小为10,要合理设置该值
.initialCapacity(10)
//设置并发数为5,即同一时间最多只能有5个线程往cache执行写入操作
.concurrencyLevel(5)
//设置cache中的数据在写入之后的存活时间为10秒
.expireAfterWrite(10, TimeUnit.SECONDS)
//构建cache实例
.build();
Guava Cache 借鉴了Java的 ConcurrentHashMap 的思想来实现一个本地缓存,通过查看其官方文档也能看到一些类似的原理。比如通过initialCapacity(5)定义初始值大小,要是定义太大就好浪费内存空间,要是太小,需要扩容的时候就会像map一样需要resize,这个过程会产生大量需要gc的对象,还有比如通过concurrencyLevel(5)来限制写入操作的并发数,这和ConcurrentHashMap的锁机制也是类似的(ConcurrentHashMap读不需要加锁,写入需要加锁,每个segment都有一个锁)。
字符串
字符串比较
if(str !=null && !str.isEmpty()){
//java
}
if(!Strings.isNullOrEmpty(str)){
//guava
}
Jioner
String join="-",java= "2016"+join+"04"+join+"23";
String guava = Joiner.on(join).join("2016", "04", "23");
Splitter
//java
String str="java,guava,业余草";
String [] java=str.split(",");
//Guava
Splitter.on(",").split("java,guava,业余草"); //结果返回Iterable<String>
//将结果中的元素trim
Splitter.on(",").trimResults().split("java , guava,业余 草");
//忽略空字符串
Splitter.on(",").omitEmptyStrings().split("java,guava,,业余草");
Preconditions
if (count <= 0) {//java
throw new IllegalArgumentException("must be positive: " + count);
}
//guava
Preconditions.checkArgument(count > 0, "must be positive: %s", count);
I/O操作
InputStream from;
OutputStream to;
//...
ByteStreams.copy(from,to);
Reader from;
Writer to;
//...
CharStreams.copy(from, to);
File from;
File to;
//...
Files.copy(from, to);
//删除文件夹下的内容(包括文件与子文件夹)
Files.deleteDirectoryContents(File directory);
//删除文件或者文件夹
Files.deleteRecursively(File file);
//移动文件
Files.move(File from, File to);