学习 Guava(三):集合

集合工具类

Lists

Lists.newArrayList(); // ①  
Lists.newArrayListWithCapacity(10); // ②  
Lists.newLinkedList(); // ③  
Lists.newCopyOnWriteArrayList(); // ④  

① 创建一个 ArrayList 对象,底层实现是数组

② 创建一个指定初始大小的 ArrayList 对象

③ 创建一个 LinkedList 对象,底层实现是链表

④ 创建一个 CopyOnWriteArrayList 对象,参考:并发编程网 - 聊聊并发:Java中的 Copy-On-Write 容器

Sets

Sets.newHashSet(); // ①  
Sets.newLinkedHashSet(); // ②  
Sets.newTreeSet(); // ③  
Sets.newConcurrentHashSet(); // ④  
Sets.newCopyOnWriteArraySet(); // ⑤  

① 创建一个 HashSet 对象,底层实现是哈希表

② 创建一个 LinkedHashSet 对象,底层实现是哈希表和链表。与 HashSet 的实现不同的是,LinkedHashSet 维护了一条双向链表保存元素值,保证了插入顺序

③ 创建一个 TreeSet 对象,TreeSet 元素是有序的,底层实现是红黑树

④ 创建一个线程安全的 Set 对象,实际上是在 ConcurrentHashMap 基础上实现的

⑤ 创建一个 CopyOnWriteArraySet 对象,参考:并发编程网 - 聊聊并发:Java中的 Copy-On-Write 容器

集合运算的 🌰:

Set<String> leftSet = Sets.newHashSet("a", "b", "c");  
Set<String> rightSet = Sets.newHashSet("c", "d", "e");


Sets.SetView<String> difference = Sets.difference(leftSet, rightSet); // ①  
// a b

Sets.SetView<String> symmetricDifference = Sets.symmetricDifference(leftSet, rightSet); // ②  
// a b d e

Sets.SetView<String> intersection = Sets.intersection(leftSet, rightSet); // ③  
// c

Sets.SetView<String> union = Sets.union(leftSet, rightSet); // ④  
// a b c d e

① 差集

② 对称差

③ 交集

④ 并集

参考:集合代数 - 维基百科

Maps

Maps.newHashMap();  
Maps.newLinkedHashMap();  
Maps.newTreeMap();  
Maps.newConcurrentMap();  
Maps.newIdentityHashMap(); // ①  

① 创建一个 IdentityHashMap 对象,IdentityHashMap 判断键值是否相等,根据引用相等性,而不是对象相等性

数据结构

Multimap

BiMap

Table

Range

Ordering

不可变集合