标签:结构 boolean 通过 list 设置 超出 set 限制 center
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库
例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。
guava类似Apache Commons工具集
标准化 - Guava库是由谷歌托管
高效 - 可靠,快速和有效的扩展JAVA标准库
优化 -Guava库经过高度的优化
guava的Optional类似于Java 8新增的Optional类,都是用来处理null的,不过guava的是抽象类,其实现类为Absent和Present,而java.util的是final类。其中一部分方法名是相同的。
google的guava库中提供了Optional接口来使null快速失败,即在可能为null的对象上做了一层封装,在使用Optional静态方法of时,如果传入的参数为null就抛出NullPointerException异常。
guava的base包中提供的Preconditions类用来方便的做参数的校验,他主要提供如下方法:
Joiner 提供了各种方法来处理字符串加入操作,对象等。
Joiner的实例不可变的,因此是线程安全的。
Splitter 能够将一个字符串按照指定的分隔符拆分成可迭代遍历的字符串集合,Iterable
不可变对象有很多优点,包括:
创建不可变集合方法:
Multiset
无序但是可重复Multiset看似是一个Set,但是实质上它不是一个Set,它没有继承Set接口,它继承Multiset接口扩展设置有重复的元素,并提供了各种实用的方法来处理这样的元素在集合中出现。
Multiset自带一个有用的功能,就是可以跟踪每个对象的数量。
Multimap<String,Integer> map= HashMultimap.create();
//Multimap是把键映射到任意多个值的一般方式
map.put("a",1);
//key相同时不会覆盖原value
map.put("a",2);
map.put("a",3);
System.out.println(map); //{a=[1, 2, 3]
Multimap提供了丰富的实现:
实现 | Key实现 | Value实现 |
---|---|---|
ArrayListMultimap | HashMap | ArrayList |
HashMultimap | HashMap | HashSet |
LinkedListMultimap | LinkedHashMap | LinkedList |
LinkedHashMultimap | LinkedHashMap | LinkedHashSet |
TreeMultimap | TreeMap | TreeSet |
ImmutableListMultimap | ImmutableMap | ImmutableList |
ImmutableSetMultimap | ImmutableMap | ImmutableSet |
ImmutableBiMap: 不可修改的 BiMap
Table
Table它有两个支持所有类型的键:”行”和”列”。
使用Table可以实现二维矩阵的数据结构,可以是稀溜矩阵。
集合操作:交集、差集、并集
Set<Integer> set1= Sets.newHashSet(1,2,3,4,5);
Set<Integer> set2=Sets.newHashSet(3,4,5,6);
Sets.SetView<Integer> inter=Sets.intersection(set1,set2); //交集
System.out.println(inter);
Sets.SetView<Integer> diff=Sets.difference(set1,set2); //差集,在A中不在B中
System.out.println(diff);
Sets.SetView<Integer> union=Sets.union(set1,set2); //并集
System.out.println(union);
缓存在很多场景下都是相当有用的。例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存。
Guava Cache与ConcurrentMap很相似,但也不完全一样。最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除。
相对地,Guava Cache为了限制内存占用,通常都设定为自动回收元素。在某些场景下,尽管LoadingCache 不回收元素,它也是很有用的,因为它会自动加载缓存。
Guava Cache是一个全内存的本地缓存实现,它提供了线程安全的实现机制
通常来说,Guava Cache适用于:你愿意消耗一些内存空间来提升速度。你预料到某些键会被查询一次以上。
缓存中存放的数据总量不会超出内存容量。(Guava Cache是单个应用运行时的本地缓存。它不把数据存放到文件或外部服务器。)
Guava Cache有两种创建方式:
LoadingCache<String,String> cache= CacheBuilder.newBuilder()
.maximumSize(100) //最大缓存数目
.expireAfterAccess(1, TimeUnit.SECONDS) //缓存1秒后过期
.build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
return key;
}
});
Cache<String,String> cache= CacheBuilder.newBuilder()
.maximumSize(100)
.expireAfterAccess(1, TimeUnit.SECONDS)
.build();
标签:结构 boolean 通过 list 设置 超出 set 限制 center
原文地址:https://www.cnblogs.com/zd-blogs/p/12015810.html