MultiSet

set我们都知道,它是无序的,并且是不允许出现重复元素的。
但有些场景我们不需要顺序,但是我们需要知道指定key出现的个数(比如每样产品ID对应的剩余数量这种统计信息),那么用MultiSet统计是一个很好的方案

HashMultiSet

底层实现原理为HashMap和MutableInteger

    public static void main(String[] args) {
MultiSet<String> set = new HashMultiSet<>(); set.add("fang");
set.add("fang");
set.add("shi");
set.add("xiang");
set.add("xiang");
set.add("xiang"); //我们发现此set是无序的,但是允许了重复元素的进入 并且记录了总数
System.out.println(set); //[shi:1, xiang:3, fang:2]
System.out.println(set.size()); //6 = 1+3+2 //批量添加 一些字就添加N个
set.add("test",5);
System.out.println(set); //[test:5, shi:1, xiang:3, fang:2] //移除方法
System.out.println(set.getCount("fang")); //2
set.remove("fang");
//此移除 一次性只会移除一个
System.out.println(set.getCount("fang")); //1
//一次性全部移除 N个
set.remove("xiang", set.getCount("xiang"));
System.out.println(set.getCount("xiang")); //0 已经被全部移除了 //removeAll 吧指定的key,全部移除
set.removeAll(Arrays.asList("fang","shi","xiang","test"));
System.out.println(set); //[]
}

PredicatedMultiSet 使用较少,不做讲解

SetUtils

difference:找到两个set之间的不同元素

返回的是第一个set里有的,但是第二个set里没有的元素们

    public static void main(String[] args) {
Set<String> set1 = new HashSet<String>(){{
add("a");
add("b");
add("c");
}};
Set<String> set2 = new HashSet<String>(){{
add("c");
add("d");
add("e");
}}; SetUtils.SetView<String> difference = SetUtils.difference(set1, set2);
System.out.println(difference); //[a,b] Set<String> strings = difference.toSet();
System.out.println(strings); //[a,b]
}
disjunction:和上面方法类似,但是属于加强版

会返回第一个set和第二个有差异的所有元素们

    public static void main(String[] args) {
Set<String> set1 = new HashSet<String>(){{
add("a");
add("b");
add("c");
}};
Set<String> set2 = new HashSet<String>(){{
add("c");
add("d");
add("e");
}}; SetUtils.SetView<String> difference = SetUtils.disjunction(set1, set2);
System.out.println(difference); //[a, b, d, e] Set<String> strings = difference.toSet();
System.out.println(strings); //[a, b, d, e]
}
emptyIfNull:见上MapUtils类似方法
newIdentityHashSet:可以实例化出一个newIdentityHashSet
isEqualSet:

两个set里面的元素是否都一样(长度一样、元素一样),有时候判断还是非常有用的

union:合并两个set,生成一个新的set
    public static void main(String[] args) {
Set<String> set1 = new HashSet<String>(){{
add("a");
add("b");
add("c");
}};
Set<String> set2 = new HashSet<String>(){{
add("c");
add("d");
add("e");
}}; SetUtils.SetView<String> union = SetUtils.union(set1, set2); System.out.println(union); //[a, b, c, d, e]
}

类似于addAll的效果,但是它的好处是生成了一个新的set,对原来的set没有污染。

MultiSetset我们都知道,它是无序的,并且是不允许出现重复元素的。但有些场景我们不需要顺序,但是我们需要知道指定key出现的个数(比如每样产品ID对应的剩余数量这种统计信息),那么用MultiSet统计是一个很好的方案
HashMultiSet底层实现原理为HashMap和MutableInteger————————————————版权声明:本文为CSDN博主「_YourBatman」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/f641385712/article/details/84109098

最新文章

  1. BZOJ 4548 小奇的糖果
  2. Java Swing 第02记 标签和按钮
  3. Javascript之setTimeout
  4. TCP/IP知识点汇总
  5. spring4+mybatis3+maven
  6. Java虚拟机支持的最大内存限制
  7. EF 4.1 一些操作
  8. 0910 noip模拟
  9. Python进阶之map()、reduce()、filter()
  10. SVN与TortoiseSVN实战:补丁详解(转)
  11. hdu 1068
  12. 网络请求 ---iOS
  13. urllib2的基本使用
  14. python模块:shelve
  15. 使用C++对物理网卡/虚拟网卡进行识别(包含内外网筛选)
  16. (转发)Navicat 远程连接 Linux服务器上的MySQL数据库
  17. JSP显示页面和数据库乱码
  18. ajax-json,遇到的一个问题,jquery var ,加载顺序。JS对象,json格式转换。
  19. Shell - 文本处理
  20. HNOI2018游记

热门文章

  1. 【Java数据结构与算法】简单排序、二分查找和异或运算
  2. 【LeetCode】974. 和可被 K 整除的子数组
  3. windows系统显示文字编码的CMD命令
  4. Adaptive AUTOSAR 学习笔记 8 - 干货小结:背景、技术、特征、架构、方法论和 Manifest
  5. java跨平台性说明
  6. 7.15考试总结(NOIP模拟16)[Star Way To Heaven&#183;God Knows&#183;Lost My Music]
  7. [考试总结]noip模拟21
  8. C语言复习(二)
  9. 凯撒密码(Caesar cipher) 详解
  10. OpenFaaS实战之九:终篇,自制模板(springboot+maven+jdk8)