list数据比对与list对象比对
第一种方式使用工具类进行比较
package com.hzbank.counter.utils;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** lists数据比对* @author nick*/
public class ListUtils {/* public static void main(String[] args) {List<String> list1 = new ArrayList<String>();List<String> list2 = new ArrayList<String>();for (int i = 0; i < 30000; i++) {list1.add("test" + i);}for (int i = 0; i < 80000; i++) {list2.add("test" + i * 2);}getDiffrentOne(list1, list2);getDiffrentTwo(list1, list2);getDiffrentThree(list1, list2);getDiffrentFour(list1, list2);}*/// 方法1,两层遍历查找,遍历次数为list1.size()*list2.size(),有点蠢private static List<String> getDiffrentOne(List<String> list1, List<String> list2) {// diff 存放不同的元素List<String> diff = new ArrayList<String>();// 开始查找的时间,用于计时/*long start = System.currentTimeMillis();*/for (String str : list1) {if (!list2.contains(str)) {diff.add(str);}}// 计时/*System.out.println("方法1 耗时:" + (System.currentTimeMillis() - start) + " 毫秒");*/return diff;}// 方法2,两层遍历查找,用retainAll()方法查找,也很蠢,方法底层依旧是两层遍历private static List<String> getDiffrentTwo(List<String> list1, List<String> list2) {/*long start = System.currentTimeMillis();*/list1.retainAll(list2);// 返回值是boolean/*System.out.println("方法2 耗时:" + (System.currentTimeMillis() - start) + " 毫秒");*/return list1;}// 方法3,用Map存放List1和List2的元素作为key,value为其在List1和List2中出现的次数// 出现次数为1的即为不同元素,查找次数为list1.size() + list2.size(),较方法1和2,是极大简化private static List<String> getDiffrentThree(List<String> list1, List<String> list2) {List<String> diff = new ArrayList<String>();/*long start = System.currentTimeMillis();*/Map<String, Integer> map = new HashMap<String, Integer>(list1.size() + list2.size());// 将List1元素放入Map,计数1for (String string : list1) {map.put(string, 1);}// 遍历List2,在Map中查找List2的元素,找到则计数+1;未找到则放入map,计数1for (String string : list2) {Integer count = map.get(string);if (count != null) {map.put(string, ++count);// 此处可优化,减少put次数,即为方法4continue;}map.put(string, 1);}for (Map.Entry<String, Integer> entry : map.entrySet()) {if (entry.getValue() == 1) {diff.add(entry.getKey());}}/*System.out.println("方法3 耗时:" + (System.currentTimeMillis() - start) + " 毫秒");*/return diff;}// 优化方法3,减少put次数private static List<String> getDiffrentFour(List<String> list1, List<String> list2) {List<String> diff = new ArrayList<String>();/* long start = System.currentTimeMillis();*/Map<String, Integer> map = new HashMap<String, Integer>(list1.size() + list2.size());List<String> maxList = list1;List<String> minList = list2;if (list2.size() > list1.size()) {maxList = list2;minList = list1;}for (String string : maxList) {map.put(string, 1);}for (String string : minList) {Integer count = map.get(string);if (count != null) {map.put(string, ++count);continue;}map.put(string, 1);}for (Map.Entry<String, Integer> entry : map.entrySet()) {if (entry.getValue() == 1) {diff.add(entry.getKey());}}/*System.out.println("方法3 耗时:" + (System.currentTimeMillis() - start) + " 毫秒");*/return diff;}
}
第二种使用com.google.common.collect的工具类
<!--Google guava工具类--><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>20.0</version></dependency>
List<String> listA = new ArrayList<String>();List<String> listB = new ArrayList<String>();for (SessionIdB sessionIdB : sessionIdBll) {listA.add(sessionIdB .getSessionIdB());}for (SessionIdA sessionIdA : sessionIdAll) {listB.add(sessionIdA .getSessionIdA());}HashSet<String> setA = new HashSet<String>(listA);HashSet<String> setB = new HashSet<String>(listB);Sets.SetView<String> difference = Sets.difference(setA, setB);List<String> listC=new ArrayList<String>();for (String string : difference) {logger.info("-----获取的sessionId--------"+string);listC.add(string);}
《参考代码如下》
set的交集, 并集, 差集
HashSet setA = newHashSet(1, 2, 3, 4, 5);
HashSet setB = newHashSet(4, 5, 6, 7, 8); SetView union = Sets.union(setA, setB);
System.out.println("union:");
for (Integer integer : union) System.out.println(integer); //union:12345867SetView difference = Sets.difference(setA, setB);
System.out.println("difference:");
for (Integer integer : difference) System.out.println(integer); //difference:123SetView intersection = Sets.intersection(setA, setB);
System.out.println("intersection:");
for (Integer integer : intersection) System.out.println(integer); //intersection:45
第三种检查参数是否有值或者为空
方法一(数据量大,效率低):
if(list!=null && list.size()>0){
}方法二(数据量大,效率高):
if(list!=null && !list.isEmpty()){
}//use java
if(list!=null && list.size()>0)
'''
if(str!=null && str.length()>0)
'''
if(str !=null && !str.isEmpty())//use guava
if(!Strings.isNullOrEmpty(str))//use java
if (count <= 0) { throw new IllegalArgumentException("must be positive: " + count);
} //use guava
Preconditions.checkArgument(count > 0, "must be positive: %s", count);
list数据比对与list对象比对相关推荐
- java_B站_面试题
Java面向对象有哪些特征,如何应用 面向对象编程是利用类和对象编程的一种思想.万物可归类,类是对于世界事物的高度抽象 ,不同的事物之间有不同的关系 ,一个类自身与外界的封装关系,一个父类和子类的 ...
- 史上最详细的23中设计模式解析,一个不落,理论搭配简单案例,更好理解哦
目录 一.软件设计模式的产生背景 二.软件设计模式的概念与意义 1. 软件设计模式的概念 2. 学习设计模式的意义 三.23 种设计模式的分类和功能 1. 根据目的来分 2. 根据作用范围来分 3. ...
- 两组数组对象数据比对
1.方法一 两组数据比对 如果第二组数据里的某项的值得已经在第一组数据里存在 就把第一组里的该属性的项变成第二组里的值 var arr1 = [{id: 1,istrue: false,},{i ...
- 小微权力监督平台功能列表:实现三资管理、大数据比对、监督举报等
小微权力监督平台实现把政策信息和收支情况晒在阳光下,同时把权力清单.行政审批.行政执法.行政处罚.政府投资项目等信息,统一汇集在公示监督子平台上.充分发挥数据前台"晒"的作用.主要 ...
- KFS邮件自动告警-数据比对-数据修复配置方法
一.告警机制 用户可以通过配置告警机制,在比对完成和节点报错时接收到邮件告警. 告警机制共包含3个方面: 1. 告警配置 2. 用户订阅 3. 告警历史 KFS邮箱分两个部分,一个是接收告警信息的邮箱 ...
- 浅谈防止返贫动态监测信息系统中“识别对象”的三大途径
2020年3月20日,原国务院扶贫开发领导小组出台<关于建立防止返贫监测和帮扶机制的指导意见>.各地认真贯彻落实工作要求,健全防止返贫动态监测和帮扶机制是从制度上预防和解决返贫问题.巩固拓 ...
- 在kotlin companion object中读取Bean,注入Bean对象
在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件. 使用组 ...
- IDEA自动生成对象所有set方法
idea中有一款插件能够生成对象所有的set方法,GenerateAllSetter :下载地址 步骤1:将下载好的压缩包放在自己记得的文件夹中,在idea中进行导入 步骤2:在本地选中刚才的压缩包, ...
- 基于Golang的对象序列化的程序包开发——myJsonMarshal
基于Golang的对象序列化的程序包开发--myJsonMarshal[阅读时间:约10分钟] 一.对象序列化概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体程序设计及 ...
最新文章
- 全网第一SoTA成绩却朴实无华的PyTorch版EfficientDet
- safehandle 和析构函数
- 电脑护眼模式_电脑手机护眼小工具
- 简单模拟QQ界面框架。
- c语言 增加 删除 修改的功能 不用链表,C语言的链表的创建、修改、添加与删除...
- 4月23 nuTonomy的语义层(人行横道,人行道,交通信号灯,停车线,车道等)的扩展包
- toast弹窗_弹窗功能解析amp;设计指南 | 为弹窗正名
- 美赛O奖、F奖论文写作技巧!【微信公众号:校园数模】
- OpenGL库 资源下载
- putty怎么更改为中文_Putty怎么样设置显示中文 设置Putty显示中文
- [小说]魔王冢(23)道士
- 有哪些常用的搜索引擎指令?
- Spire.XLS:一款Excel处理神器(2)
- 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折
- php易盾,内容审核统一管控!网易易盾智能审核管理系统开放试用
- 面向NDN的网络攻击检测技术分析
- win10 增加右键在此处打开命令行菜单
- 动态规划之01背包问题讲解
- ogm 算法_如何在Windows Vista中播放.OGM视频文件
- 确定与不确定,风险与保险
热门文章
- WLAN适配器的驱动程序可能出现了问题(连不了wifi)解决办法
- 站内搜寻引擎 php mysql_迅搜(xunsearch) - 开源免费中文全文搜索引擎|PHP全文检索|mysql全文检索|站内搜索...
- 记忆犹新的定时任务的bug
- IPv6基本配置(华为设备)
- 复式记账法-银行业务
- 解析如何快速准确区别肖特基二极管与快恢复二极管的诀窍
- Android APP性能及专项测试(个人整理)
- 来自http://blog.csdn.net/a837199685
- asp.net mysql 连接池_asp.net 使用数据库连接池
- 1为数据库查询的数据中加一排序号,2判断为查询出来的字段赋值