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。包含的Entry支持使用getElement()和getCount()
  • setCount(E element ,int count): 设定某一个元素的重复次数
  • setCount(E element,int oldCount,int newCount): 将符合原有重复个数的元素修改为新的重复次数
  • retainAll(Collection c) : 保留出现在给定集合参数的所有的元素
  • removeAll(Collectionc) : 去除出现给给定集合参数的所有的元素

你可能感兴趣的:(Java,集合)