Guava 之 Multiset

Multiset 是 guava 包下一種新的集合,可以方便的統計集合中重複元素出現的次數。

Multiset 有以下實現類:

  • HashMultiset::元素存放於 HashMap
  • LinkedHashMap:即元素的排列順序由第一次放入的順序決定
  • TreeMultiset:元素被排序存放於TreeMap
  • EnumMultiset::元素必須是 enum 類型
  • ImmutableMultiset: 不可修改的 Mutiset

下面談談 HashMultiset 常用的使用方法:

場景:統計一份名單中每個名字出現的次數

在以前我們可能會使用 HashMap 來處理:

List<String> nameList = Arrays.asList("張三", "李四", "王五", "喬二娃", "張三", "李四", "Tom");
Map<String, Integer> nameCountMap = new HashMap<>();

for (String name : nameList) {
    Integer count = nameCountMap.get(name);
    nameCountMap.put(name, count != null ? ++count : 1);
}

System.out.println(nameCountMap.get("張三"));//2

使用 Multiset :

List<String> nameList = Arrays.asList("張三", "李四", "王五", "喬二娃", "張三", "李四", "Tom");
//創建一個 Multiset
Multiset<String> nameMultiset = HashMultiset.create();

nameMultiset.addAll(nameList);

Integer count = nameMultiset.count("張三");//2

Multiset 接口中定義的方法主要有:

  • add(E element) :向其中添加單個元素
  • add(E element,int occurrences) : 向其中添加指定個數的元素
  • count(Object element) : 返回給定參數元素的個數
  • remove(E element) : 移除一個元素,其count值 會響應減少
  • remove(E element,int occurrences): 移除相應個數的元素
  • elementSet() : 將不同的元素放入一個Set中
  • entrySet(): 類似與Map.entrySet 返回Set<Multiset.Entry>。包含的Entry支持使用getElement()和getCount()
  • setCount(E element ,int count): 設定某一個元素的重複次數
  • setCount(E element,int oldCount,int newCount): 將符合原有重複個數的元素修改爲新的重複次數
  • retainAll(Collection c) : 保留出現在給定集合參數的所有的元素
  • removeAll(Collectionc) : 去除出現給給定集合參數的所有的元素
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章