基于 Google Guava 官方教程的解答
?? Guava 提供了哪些 JDK 不具備的 API?
Guava 擴展了 JDK 的集合框架,提供了多種 JDK 沒有的實用 API:
-
不可變集合(Immutable Collections)
ImmutableList
、ImmutableSet
、ImmutableMap
等- 特性:創建后不可修改,線程安全,性能優于
Collections.unmodifiableXXX()
// 創建方式 ImmutableList<String> list = ImmutableList.of("A", "B", "C"); ImmutableMap<String, Integer> map = ImmutableMap.of("k1", 1, "k2", 2);
-
新集合類型
類型 用途 實現類 Multiset
元素可重復的集合(帶計數) HashMultiset
,TreeMultiset
Multimap
一鍵對應多個值(替代 Map<K, List<V>>
)ArrayListMultimap
,HashMultimap
BiMap
鍵值雙向唯一映射( inverse()
反轉)HashBiMap
,ImmutableBiMap
Table
二維表結構(行+列作為鍵) HashBasedTable
,TreeBasedTable
// Multimap 示例 Multimap<String, String> multimap = ArrayListMultimap.create(); multimap.put("語言", "Java"); multimap.put("語言", "Python"); // 一鍵多值
-
緩存工具
CacheBuilder
:構建高性能本地緩存(支持過期策略、弱引用等)
Cache<String, Data> cache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterWrite(10, TimeUnit.MINUTES).build();
-
函數式工具
Function
/Predicate
接口 +Collections2.transform/filter
List<String> upper = Lists.transform(list, String::toUpperCase);
-
字符串處理
Joiner
:安全連接字符串(自動處理 null)Splitter
:靈活分割字符串
String joined = Joiner.on("|").skipNulls().join("A", null, "B"); // "A|B"
-
原生類型增強
Ints
,Longs
等工具類(如Ints.tryParse()
)
?? 簡單介紹 Guava
Guava(Google Core Libraries for Java) 是 Google 開源的 Java 核心庫:
- 定位:增強 JDK 能力,提供 Google 內部項目驗證的最佳實踐
- 特點:
- 填補 JDK 功能空白(如不可變集合、多維集合)
- 強調代碼健壯性(如強制空值檢查
Optional
) - 高性能優化(如緩存工具比
ConcurrentHashMap
快 30%+) - 開發效率提升(減少模板代碼)
?? Guava 包含的主要內容
根據官方教程目錄,Guava 分為 13 個模塊:
模塊 | 核心功能 |
---|---|
1. 基本工具 | Optional (空安全)、Preconditions (參數校驗)、Ordering (排序) |
2. 集合 | 不可變集合、Multiset /Multimap /Table 、集合工具類 |
3. 緩存 | CacheBuilder (本地緩存框架) |
4. 函數式編程 | 函數接口與集合操作(Java 8 前核心方案) |
5. 并發 | ListenableFuture (異步回調)、Service (服務生命周期管理) |
6. 字符串處理 | Splitter /Joiner /CharMatcher |
7. 原生類型 | Ints /Longs 等基本類型工具 |
8. 區間 | Range (數學區間操作) |
9. I/O | 簡化 Java I/O 操作(如 Files /ByteStreams ) |
10. 散列 | BloomFilter (布隆過濾器)、Hashing (哈希算法) |
11. 事件總線 | EventBus (發布-訂閱模式) |
12. 數學運算 | 優化數學計算工具 |
13. 反射 | TypeToken (泛型類型安全訪問) |
示例場景:使用
EventBus
解耦組件// 發布者 eventBus.post(new OrderEvent(orderId)); // 訂閱者 @Subscribe public void handleOrderEvent(OrderEvent event) {// 處理事件 }
?? 總結
Guava 的核心價值在于:
- 填補 JDK 空白:提供
Multimap
等 JDK 缺失的集合類型 - 工程最佳實踐:不可變集合/空安全設計等 Google 生產級方案
- 性能優化:緩存/集合工具等高性能實現
- 代碼簡潔:減少如
Map<K, List<V>>
的模板代碼
官方建議優先使用:
// 替代 Collections.unmodifiableList()
ImmutableList.copyOf(mutableList); // 替代 Map<K, List<V>>
Multimap<Integer, String> multimap = ArrayListMultimap.create();
在 IntelliJ IDEA 中使用 Guava API & Gradle 依賴配置 & Guava 集合類型詳解
一、在 IntelliJ IDEA 中使用 Guava API
步驟流程:
-
創建/打開項目
通過菜單File → New → Project
創建新項目(選擇 Gradle