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) : 去除出现给给定集合参数的所有的元素

Guava 之 Multiset相关推荐

  1. java multiset_java代码(5) ---guava之Multiset

    guava之Multiset 一.概述 Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关,Multiset继承于JDK的Collection接口,而不是Set ...

  2. java multiset_java代码之美(5)---guava之Multiset

    guava之Multiset 一.概述 Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关.Multiset继承于JDK的Cllection接口,而不是Set接 ...

  3. guava中Multiset、HashMultiset使用分析

    guava包中提供了Multiset接口,这个接口没有实现java.util.Set接口,Set接口规定里面是不能够放入重复的元素,如果放入重复元素会被覆盖掉的:然而Multiset接口却是可以放入重 ...

  4. Guava 2.2-新集合类型

    Guava引入了很多JDK没有的.但我们发现明显有用的新集合类型.这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念.作为一般规则,Guava集合非常精准地遵循了JDK接口契约 ...

  5. 【吐血整理】想学Google Guava看这篇就够了

    Guava是谷歌提供的一个核心Java类库,其中包括新的集合类型.不可变集合.图库,以及用于并发.I/O.Hash.缓存.字符串等的 实用工具.它在谷歌中的大多数Java项目中被广泛使用,也被许多其他 ...

  6. 【编程实践】Google Guava 极简教程

    前言 Guava 工程包含了若干被 Google 的 Java 项目广泛依赖 的核心库,我们希望通过此文档为 Guava 中最流行和最强大的功能,提供更具可读性和解释性的说明. 适用人群 本教程是基础 ...

  7. java 计数器怎么定义_4.7 JAVA计数器

    你也许经常需要一个计数器来了解数据库或文本文件中一些事务出现的频率(例如单词).通过在Java中计数器可以通过HashMap可以轻松实现计数器.本文比较了实现不同的计数器方法. 更新: 查看Java8 ...

  8. Guava新集合-Multiset

    2019独角兽企业重金招聘Python工程师标准>>> Multiset集合 Multiset是什么?顾名思义,Multiset和Set的区别就是可以保存多个相同的对象.在JDK中, ...

  9. Guava包学习--Multiset

    Multiset之前倒是没用过,后来看了下还挺有用,其实它就是支持重复元素的HashSet,相当于list+set的集合,综合了两种集合的优点. 它扩展了Collection: @GwtCompati ...

最新文章

  1. 27岁的张一鸣教给我们工作上的那些事
  2. 项目集跟进计划_项目延期,项目经理应该如何补救?
  3. 怎么画正五边形步骤_每个药店必备三伏贴的POP海报,我教你画
  4. JavaScript事件绑定
  5. linux安装xz解压xz文件和安装python
  6. excel行列互换_Excel如何实现行列数据互换?其实除了复制粘贴,还能这样操作...
  7. Spring Boot中的Properties
  8. Modular multiplicative inverse 模逆元
  9. 华为鸿蒙是物联网操作系统;字节跳动的飞聊被 App Store 下架;FFmpeg 作者编写 JS 引擎 | 极客头条...
  10. 嵌入式Linux书籍清单
  11. 统计学计算机app,统计学计算器
  12. 淘宝母婴购物数据分析
  13. AR5B22网卡折腾记录
  14. Scene Graph(视觉关系场景图检测)
  15. ISIS详细配置实验
  16. SAP中标准价和移动平均价的学习笔记
  17. Mysql优势和特点
  18. windows 设置设置程序的起始位置
  19. 39-网上商城数据库-用户信息数据操作
  20. 移动硬盘里文件夹不见了 内容还在 不显示

热门文章

  1. 怎样确定职业发展方向
  2. 经典案例:卖票问题【线程同步】
  3. 饭谈:软件测试的下水道井盖为什么是圆的?
  4. 出海现金贷还有未来吗?
  5. 中央财经大学博士后于鲁平:不同于技术和应用,监管永远只能前进一小步!
  6. 新手入门 | photoshop基础教程
  7. 【与公主对话】爱情的本质是什么
  8. 使用极限学习机进行股市预测(Matlab代码实现)
  9. Allegro整体旋转
  10. python爬虫-笔趣阁