Guava
Uset Guide https://github.com/google/guava/wiki
官方項目地址: https://github.com/google/guava
中文非官方項目 : http://ifeve.com/google-guava/#more-8776
學習常用的學習,有些暫時用不到跳過
小目錄
1.基本工具
1.2 前置條件判斷
Preconditions
類
Guava在Preconditions類中提供了若干前置條件判斷的實用方法,我們強烈建議在Eclipse中靜態導入這些方法。每個方法都有三個變種:
- 沒有額外參數:拋出的異常中沒有錯誤消息;
- 有一個Object對象作爲額外參數:拋出的異常使用Object.toString() 作爲錯誤消息;
- 有一個String對象作爲額外參數,並且有一組任意數量的附加Object對象:這個變種處理異常消息的方式有點類似printf,但考慮GWT的兼容性和效率,只支持%s指示符。
1.3 常見Objects方法
Objects.equals
guava中使用的是 Objects.equal
, 但是注意 jdk7開始引入 Obejects.equals
Objects.hashCode
Guava: Objects.hashCode(Object...)
JDK7: Objects.hash(Object...)
Objects.toString
Objects.toStringHelper :
1 // Returns "ClassName{x=1}"
2 Objects.toStringHelper(this).add("x", 1).toString();
3 // Returns "MyObject{x=1}"
4 Objects.toStringHelper("MyObject").add("x", 1).toString();
ComparisonChain
一定要會用,下面是實現compare接口中複寫compareTo方法
這種Fluent接口風格的可讀性更高,發生錯誤編碼的機率更小,並且能避免做不必要的工作。
1.4 排序
2.集合Collections
這一部分是最成熟和爲人所知的部分
2.1 不可變集合
爲甚麼要用不可變集合
- 當對象被不可信的庫調用時,不可變形式是安全的;
- 不可變對象被多個線程調用時,不存在競態條件問題
- 不可變集合不需要考慮變化,因此可以節省時間和空間。所有不可變的集合都比它們的可變形式有更好的內存利用率(分析和測試細節);
- 不可變對象因爲有固定不變,可以作爲常量來安全使用。
具體再瞭解
2.3 強大的集合工具類
jdk和guava集合類關係對比
靜態工廠方法
Lists.newArrayList();
Lists.newArrayList(“a”,“b”,“c”);
Lists.newArrayListWithCapacity(100);
Iterables
guava偏向於對iterable處理
Guava提供的工具方法更偏向於接受Iterable而不是Collection類型。在Google,對於不存放在主存的集合——比如從數據庫或其他數據中心收集的結果集,因爲實際上還沒有攫取全部數據,這類結果集都不能支持類似size()的操作 ——通常都不會用Collection類型來表示。