博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实例|如何从两个List中筛选出相同的值
阅读量:4293 次
发布时间:2019-05-27

本文共 770 字,大约阅读时间需要 2 分钟。

IT优就业 2017-09-29 16:26

实例|如何从两个List中筛选出相同的值

如何从两个List中筛选出相同的值

假设现有社保卡和身份证若干,想要匹配筛选出一一对应的社保卡和身份证。

转换为List<社保卡> socialList,和List idList,从二者中找出匹配的社保卡。

模型

创建社保卡类:

实例|如何从两个List中筛选出相同的值

实例|如何从两个List中筛选出相同的值

创建身份证类:

实例|如何从两个List中筛选出相同的值

最简单的办法:遍历

只要做两轮循环即可。

准备初始化数据:

实例|如何从两个List中筛选出相同的值

遍历

实例|如何从两个List中筛选出相同的值

很容易看出,时间复杂度O(m,n)=m*n.

采用Hash

通过观察发现,两个list取相同的部分时,每次都遍历两个list。那么,可以把判断条件放入Hash中,判断hash是否存在来代替遍历查找。

实例|如何从两个List中筛选出相同的值

如此,假设hash算法特别好,hash的时间复杂度为O(n)=n。如此推出这种做法的时间复杂度为O(m,n)=2m+n. 当然,更重要的是这种写法更让人喜欢,天然不喜欢嵌套的判断,喜欢扁平化的风格。

Hash一定会比遍历快吗

想当然的以为,hash肯定会比遍历快,因为是hash啊。其实,可以算算比较结果。比较什么时候

2m+n < m*n

从数据归纳法的角度,n必须大于2,不然即演变程

2m+2 < 2m

于是,当n>2时:

实例|如何从两个List中筛选出相同的值

结果是:

m=2,n=33

也就是说n<=3的时候,遍历要比hash快。事实上还要更快,因为hash还需要创建更多的对象。然而,大部分情况下,n也就是第二个数组的长度是大于3的。这就是为什么说hash要更好写。当然,另一个很重要的原因是lambda stream的运算符号远比嵌套循环让人喜爱。


· 2017年【中公教育】特别推出2017年就业促进计划,500万就业基金助你成为IT达人

详情请戳http://www.ujiuye.com/zt/jycj/?wt.bd=bgz

· 什么?海量IT学习资料白给你都不要?别想了,加群抢:584539956

转载地址:http://iuzws.baihongyu.com/

你可能感兴趣的文章
jenkins + maven+ gitlab 自动化部署
查看>>
Pull Request流程
查看>>
Lambda 表达式
查看>>
函数式数据处理(一)--流
查看>>
java 流使用
查看>>
java 用流收集数据
查看>>
java并行流
查看>>
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>
全面理解Java内存模型
查看>>
Java中Synchronized的用法
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
接口技术原理
查看>>
五大串口的基本原理
查看>>
PCB设计技巧与注意事项
查看>>
linux进程之间通讯常用信号
查看>>