常规使用代码
package com.meituan.movie.pro.marketing.test;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.ImmutableSet;
import java.util.HashSet;
/**
* Created by zhangchuan on 2017/7/24.
*/
public class Main {
public static void main(String[] args) {
// 不可变set
ImmutableSet<String> immutableSet = ImmutableSet.of("RED", "GREEN");
// 普通set生成不可变set
ImmutableSet<String> immutableSet1 = ImmutableSet.copyOf(new HashSet<>());
// Builder构造器
ImmutableSet.Builder<String> builder = ImmutableSet.builder();
ImmutableSet<String> immutableSet2 = builder.add("RED").addAll(new HashSet<>()).build();
/**
* 可重复集合
* HashMultiset: 元素存放于 HashMap
* LinkedHashMultiset: 元素存放于 LinkedHashMap,即元素的排列顺序由第一次放入的顺序决定
* TreeMultiset:元素被排序存放于TreeMap
* EnumMultiset: 元素必须是 enum 类型
* ImmutableMultiset: 不可修改的 Mutiset
**/
HashMultiset<String> multiSet = HashMultiset.create();
multiSet.addAll(new HashSet<>());
// count word “the”
Integer count = multiSet.count("the");
/**
* HashMultimap 多value
* HashMultimap: key 放在 HashMap,而 value 放在 HashSet,即一个 key 对应的 value
* 不可重复
* ArrayListMultimap: key 放在 HashMap,而 value 放在 ArrayList,即一个 key 对应的
* value 有顺序可重复
* LinkedHashMultimap: key 放在 LinkedHashMap,而 value 放在 LinkedHashSet,即一个
* key 对应的 value 有顺序不可重复
* TreeMultimap: key 放在 TreeMap,而 value 放在 TreeSet,即一个 key 对应的 value
* 有排列顺序
* ImmutableMultimap: 不可修改的 Multimap
*/
HashMultimap<String, String> map = HashMultimap.create();
map.put("1", "2");
map.put("1", "3");
/**
* BitMap key和value可旋转的map
* HashBiMap: key 集合与 value 集合都有 HashMap 实现
* EnumBiMap: key 与 value 都必须是 enum 类型
* ImmutableBiMap: 不可修改的 BiMap
*/
BiMap<Integer, String> bitMap = HashBiMap.create();
bitMap.put(1, "1");
bitMap.inverse().get("1");
/**
*
*/
}
}
使用LoadingCache 做缓存
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import java.util.concurrent.TimeUnit;
/**
* Created by zhangchuan on 2017/7/24.
*/
public class MapTest {
public static void main(String[] args){
LoadingCache<String,String> cahceBuilder=CacheBuilder
.newBuilder()
.maximumSize(10)
.expireAfterAccess(100,TimeUnit.SECONDS)//过期时间
.expireAfterWrite(11,TimeUnit.SECONDS)//给定时间内没有写访问
.refreshAfterWrite(1,TimeUnit.SECONDS)// 给定时间没有读访问。
.build(new CacheLoader<String, String>(){
@Override
public String load(String key) throws Exception {
return createObject(key);
}
});
cahceBuilder.put("1","2");
try {
System.out.println(cahceBuilder.get("2"));
System.out.println(cahceBuilder.get("2"));
}catch (java.util.concurrent.ExecutionException e){
System.out.println(1);
}
}
public static String createObject(String key){
System.out.println("createObject");
return key+"1";
}
}