Guava新集合-Multiset
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
Multiset集合
Multiset是什么?顧名思義,Multiset和Set的區(qū)別就是可以保存多個相同的對象。在JDK中,List和Set有一個基本的區(qū)別,就是List可以包含多個相同對象,且是有順序的,而Set不能有重復,且不保證順序(有些實現(xiàn)有順序,例如LinkedHashSet和SortedSet等)所以Multiset占據(jù)了List和Set之間的一個灰色地帶:允許重復,但是不保證順序。?
常見使用場景:Multiset有一個有用的功能,就是跟蹤每種對象的數(shù)量,所以你可以用來進行數(shù)字統(tǒng)計。?
Multiset主要方法
Multiset接口定義的接口主要有:
add(E element) :向其中添加單個元素
add(E element,int occurrences) : 向其中添加指定個數(shù)的元素
count(Object element) : 返回給定參數(shù)元素的個數(shù)
remove(E element) : 移除一個元素,其count值 會響應減少
remove(E element,int occurrences): 移除相應個數(shù)的元素
elementSet() : 將不同的元素放入一個Set中
entrySet(): 類似與Map.entrySet 返回Set<Multiset.Entry>。包含的Entry支持使用getElement()和getCount()
setCount(E element ,int count): 設定某一個元素的重復次數(shù)
setCount(E element,int oldCount,int newCount): 將符合原有重復個數(shù)的元素修改為新的重復次數(shù)
retainAll(Collection c) : 保留出現(xiàn)在給定集合參數(shù)的所有的元素?
removeAll(Collectionc) : 去除出現(xiàn)給給定集合參數(shù)的所有的元素
Multiset不是Map
需要注意的是Multiset不是一個Map<E,Integer>,盡管Multiset提供一部分類似的功能實現(xiàn)。其它值得關注的差別有:
Multiset中的元素的重復個數(shù)只會是正數(shù),且最大不會超過Integer.MAX_VALUE。設定計數(shù)為0的元素將不會出現(xiàn)multiset中,也不會出現(xiàn)elementSet()和entrySet()的返回結果中。
multiset.size() 方法返回的是所有的元素的總和,相當于是將所有重復的個數(shù)相加。如果需要知道每個元素的個數(shù)可以使用elementSet().size()得到.(因而調用add(E)方法會是multiset.size()增加1).
multiset.iterator() 會循環(huán)迭代每一個出現(xiàn)的元素,迭代的次數(shù)與multiset.size()相同。 iterates over each occurrence of each element, so the length of the iteration is equal to multiset.size().
Multiset 支持添加、移除多個元素以及重新設定元素的個數(shù)。執(zhí)行setCount(element,0)相當于移除multiset中所有的相同元素。
調用multiset.count(elem)方法時,如果該元素不在該集中,那么返回的結果只會是0。
Multiset的實現(xiàn)
Guava提供了Multiset的多種實現(xiàn),這些實現(xiàn)基本對應了JDK中Map的實現(xiàn):?
Map ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Corresponding Multiset?? Supports null elements
HashMap ? ? ? ? ? ? ? ? ? ? ? HashMultiset ? ? ? ? ? ? ? ? ? ? ? ? ?Yes
TreeMap ? ? ? ? ? ? ? ? ? ? ? ?TreeMultiset ? ? ? ? ? ? ? ? ? ? ? ? ? Yes (if the comparator does)
LinkedHashMap ? ? ? ? ? ?LinkedHashMultiset ? ? ? ? ? ? ?Yes
ConcurrentHashMap ? ?ConcurrentHashMultiset ? ? ? ?No
ImmutableMap ? ? ? ? ? ? ?ImmutableMultiset ? ? ? ? ? ? ? ? ? No
?
轉載于:https://my.oschina.net/kevinair/blog/727541
總結
以上是生活随笔為你收集整理的Guava新集合-Multiset的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Session】Tomcat中Sess
- 下一篇: [实用]DNS解析命令,静静地学会【转载