用一次就会爱上的Google Guava 类库

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工具类
CollectionJDKCollections2:不要和java.util.Collections混淆
ListJDKLists
SetJDKSets
SortedSetJDKSets
MapJDKMaps
SortedMapJDKMaps
QueueJDKQueues
MultisetGuavaMultisets
MultimapGuavaMultimaps
BiMapGuavaMaps
TableGuavaTables

缓存

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);      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿华田512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值