guava -- 新集合類型

Guava引入了不少JDK沒有的、但有用的新集合類型。這些新類型是爲了和JDK集合框架共存,而沒有往JDK集合抽象中硬塞其餘概念。程序員

做爲通常規則,Guava集合很是精準地遵循了JDK接口契約。框架

1. Multiset

統計一個詞在文檔中出現了多少次,傳統的作法是這樣的:3d

Multiset和Set的區別就是能夠保存多個相同的對象。在JDK中,List和Set有一個基本的區別,就是List能夠包含多個相同對象,且是有順序的,而Set不能有重複,且不保證順序(有些實現有順序,例如LinkedHashSet和SortedSet等)因此Multiset佔據了List和Set之間的一個灰色地帶:容許重複,可是不保證順序。對象

使用Multiset,直接上代碼:blog

2. Multimap

每一個有經驗的Java程序員都在某處實現過Map<K, List<V>>或Map<K, Set<V>>。索引

Guava的Multimap能夠很容易地把一個鍵映射到多個值。接口

3. BiMap

 傳統上,實現鍵值對的雙向映射須要維護兩個單獨的map,並保持它們間的同步。但這種方式很容易出錯,並且對於值已經在map中的狀況,會變得很是混亂。文檔

BiMap<K, V>是特殊的Map:同步

  • 能夠用 inverse()反轉BiMap<K, V>的鍵值映射
  • 保證值是惟一的,所以values()返回Set而不是普通的Collection

在BiMap中,若是你想把鍵映射到已經存在的值,會拋出IllegalArgumentException異常。若是對特定值,你想要強制替換它的鍵,請使用BiMap.forcePut(key, value)。io

4. Table

一般來講,當你想使用多個鍵作索引的時候,你可能會用相似Map<FirstName, Map<LastName, Person>>的實現,這種方式很醜陋,使用上也不友好。

Guava爲此提供了新集合類型Table,它有兩個支持全部類型的鍵:」行」和」列」。

相關文章
相關標籤/搜索