Commons-Collections(二)之set
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
Commons-Collections(二)之set的更多相关文章
- 关于java.lang.NoClassDefFoundError: org/apache/commons/collections/FastHashMap的错误解决办法
在JavaEE开发中,在把配置文件中的数据或用户表单提交上来的数据,封装在相应JavaBean的对象的对应属性中时:在实际开发中,使用第三方法工具包BeanUtils(commons-beanutil ...
- Apache Commons Collections 反序列化详细分析学习总结
0x01.环境准备: Apache Commons Collections 3.1版本,下载链接参考: https://www.secfree.com/a/231.html jd jui地址(将jar ...
- java.lang.NoClassDefFoundError: org/apache/commons/collections/FastHashMap报错解决
在使用 commons-beanutils-1.9.2.jarcommons-logging-1.1.1.jar 的时候报错 java.lang.NoClassDefFoundError: org/a ...
- java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMap
七月 26, 2017 1:52:15 上午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for ...
- 出现java.lang.NoClassDefFoundError: org/apache/commons/collections/FastHashMap错误问题解决
首先出现这个问题,你应该是用了 BeanUtils.populate(meter,map); import org.apache.commons.beanutils.BeanUtils;并且导入了co ...
- ysoserial分析【一】 之 Apache Commons Collections
目录 前言 基础知识 Transformer 利用InvokerTransformer造成命令执行 Map TransformedMap LazyMap AnnotationInvocationHan ...
- Apache Commons Collections
http://commons.apache.org/proper/commons-collections/userguide.html 1. Utilities SetUtils Collection ...
- Apache Commons Digester 二(规则模块绑定-RulesModule、异步解析-asyncParse、xml变量Substitutor、带参构造方法)
前言 上一篇对Digester做了基本介绍,也已经了解了Digester的基本使用方法,接下来将继续学习其相关特性,本篇主要涉及以下几个内容: 规则模块绑定,通过定义一个RulesModule接口实现 ...
- Apache Commons Beanutils 二 (动态Bean - DynaBeans)
相关背景 上一篇介绍了PropertyUtils的用法,PropertyUtils主要是在不修改bean结构的前提下,动态访问bean的属性: 但是有时候,我们会经常希望能够在不定义一个Java类的前 ...
- 安卓项目中使用JSON引发的一个小错误 Multiple dex files define Lorg/apache/commons/collections/Buffer
原因: 这里添加的jar包和android自带的jar产生了冲突
随机推荐
- C语言:读TXT 模拟键盘打字输出
//#include<ctype.h> #include<stdio.h> #include <windows.h> //#include "string ...
- 家庭账本开发day11
编写登录界面和个人信息查看界面 $.ajax({ url: "UserServlet?method=login",//url ...
- 微信小程序云开发-云函数-初始化云函数环境
一.新建云函数文件夹 新建的云函数文件夹,命名为cloud,该文件夹一定要与pages文件夹同级.此时该文件夹的前面没有云朵的标识. 二.配置project.config.json文件 在proje ...
- WEB安全新玩法 [8] 阻止订单重复提交
交易订单的重复提交虽然通常不会直接影响现金流和商品流,但依然会给网站运营方带来损害,如消耗系统资源.影响正常用户订单生成.制造恶意用户发起纠纷的机会等.倘若订单对象是虚拟商品,也有可能造成实际损失.订 ...
- my.ini修改后启动失败
修改之后ini文件后不要直接关闭在记事本里点击另存为,编码选择为ANSI编码格式,再保存就行了
- solr(CVE-2020-13957)文件上传
影响版本 Apache Solr 6.6.0 - 6.6.5 Apache Solr 7.0.0 - 7.7.3 Apache Solr 8.0.0 - 8.6.2 环境搭建 下载环境 http:// ...
- 【LeetCode】81. 搜索旋转排序数组 II
81. 搜索旋转排序数组 II 知识点:数组,二分查找: 题目描述 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k(0 ...
- 打造自己的Vue组件文档生成工具
程序员最讨厌的两件事情,第一种是写文档,另一种是别人没有写文档.有没有直接根据vue组件生成文档的呢?当然是有的的.但第三方使用起来不一定能和现有项目结合使用,往往需要额外的注释用来标记提取信息.使用 ...
- BUUCTF-[HCTF 2018]admin(Unicode欺骗&伪造session)
目录 方法一:Unicode欺骗 方法二:伪造session 参考文章 记一道flask下session伪造的题. 方法一:Unicode欺骗 拿到题目f12提示you are not admin,显 ...
- C++ //纯虚函数和抽象类 // 语法 virtual 返回值类型 函数名 (参数列表)=0 //当类中有了纯虚函数 这个类也称为抽象类
1 //纯虚函数和抽象类 2 // 语法 virtual 返回值类型 函数名 (参数列表)=0 3 //当类中有了纯虚函数 这个类也称为抽象类 4 5 6 #include <iostream& ...