第一种方式使用工具类进行比较

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对象比对相关推荐

  1. java_B站_面试题

    Java面向对象有哪些特征,如何应用 ​ 面向对象编程是利用类和对象编程的一种思想.万物可归类,类是对于世界事物的高度抽象 ,不同的事物之间有不同的关系 ,一个类自身与外界的封装关系,一个父类和子类的 ...

  2. 史上最详细的23中设计模式解析,一个不落,理论搭配简单案例,更好理解哦

    目录 一.软件设计模式的产生背景 二.软件设计模式的概念与意义 1. 软件设计模式的概念 2. 学习设计模式的意义 三.23 种设计模式的分类和功能 1. 根据目的来分 2. 根据作用范围来分 3. ...

  3. 两组数组对象数据比对

    1.方法一 两组数据比对  如果第二组数据里的某项的值得已经在第一组数据里存在   就把第一组里的该属性的项变成第二组里的值 var arr1 = [{id: 1,istrue: false,},{i ...

  4. 小微权力监督平台功能列表:实现三资管理、大数据比对、监督举报等

    小微权力监督平台实现把政策信息和收支情况晒在阳光下,同时把权力清单.行政审批.行政执法.行政处罚.政府投资项目等信息,统一汇集在公示监督子平台上.充分发挥数据前台"晒"的作用.主要 ...

  5. KFS邮件自动告警-数据比对-数据修复配置方法

    一.告警机制 用户可以通过配置告警机制,在比对完成和节点报错时接收到邮件告警. 告警机制共包含3个方面: 1. 告警配置 2. 用户订阅 3. 告警历史 KFS邮箱分两个部分,一个是接收告警信息的邮箱 ...

  6. 浅谈防止返贫动态监测信息系统中“识别对象”的三大途径

    2020年3月20日,原国务院扶贫开发领导小组出台<关于建立防止返贫监测和帮扶机制的指导意见>.各地认真贯彻落实工作要求,健全防止返贫动态监测和帮扶机制是从制度上预防和解决返贫问题.巩固拓 ...

  7. 在kotlin companion object中读取Bean,注入Bean对象

    在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件.   使用组 ...

  8. IDEA自动生成对象所有set方法

    idea中有一款插件能够生成对象所有的set方法,GenerateAllSetter :下载地址 步骤1:将下载好的压缩包放在自己记得的文件夹中,在idea中进行导入 步骤2:在本地选中刚才的压缩包, ...

  9. 基于Golang的对象序列化的程序包开发——myJsonMarshal

    基于Golang的对象序列化的程序包开发--myJsonMarshal[阅读时间:约10分钟] 一.对象序列化概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体程序设计及 ...

最新文章

  1. 全网第一SoTA成绩却朴实无华的PyTorch版EfficientDet
  2. safehandle 和析构函数
  3. 电脑护眼模式_电脑手机护眼小工具
  4. 简单模拟QQ界面框架。
  5. c语言 增加 删除 修改的功能 不用链表,C语言的链表的创建、修改、添加与删除...
  6. 4月23 nuTonomy的语义层(人行横道,人行道,交通信号灯,停车线,车道等)的扩展包
  7. toast弹窗_弹窗功能解析amp;设计指南 | 为弹窗正名
  8. 美赛O奖、F奖论文写作技巧!【微信公众号:校园数模】
  9. OpenGL库 资源下载
  10. putty怎么更改为中文_Putty怎么样设置显示中文 设置Putty显示中文
  11. [小说]魔王冢(23)道士
  12. 有哪些常用的搜索引擎指令?
  13. Spire.XLS:一款Excel处理神器(2)
  14. 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折
  15. php易盾,内容审核统一管控!网易易盾智能审核管理系统开放试用
  16. 面向NDN的网络攻击检测技术分析
  17. win10 增加右键在此处打开命令行菜单
  18. 动态规划之01背包问题讲解
  19. ogm 算法_如何在Windows Vista中播放.OGM视频文件
  20. 确定与不确定,风险与保险

热门文章

  1. WLAN适配器的驱动程序可能出现了问题(连不了wifi)解决办法
  2. 站内搜寻引擎 php mysql_迅搜(xunsearch) - 开源免费中文全文搜索引擎|PHP全文检索|mysql全文检索|站内搜索...
  3. 记忆犹新的定时任务的bug
  4. IPv6基本配置(华为设备)
  5. 复式记账法-银行业务
  6. 解析如何快速准确区别肖特基二极管与快恢复二极管的诀窍
  7. Android APP性能及专项测试(个人整理)
  8. 来自http://blog.csdn.net/a837199685
  9. asp.net mysql 连接池_asp.net 使用数据库连接池
  10. 1为数据库查询的数据中加一排序号,2判断为查询出来的字段赋值