高效的找出两个List中的不同元素
/*
* TestList.java
* Version 1.0.0
* Created on 2017年12月15日
* Copyright ReYo.Cn
*/
package reyo.sdk.utils.test.list2; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class TestList { public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
for (int i = 0; i < 10000; i++) {
list1.add("test" + i);
list2.add("test" + i * 2);
}
getDiffrent(list1, list2);
getDiffrent3(list1, list2);
getDiffrent5(list1, list2);
getDiffrent4(list1, list2);
getDiffrent2(list1, list2); // getDiffrent3 total times 32271699
// getDiffrent5 total times 12239545
// getDiffrent4 total times 16786491
// getDiffrent2 total times 2438731459 } /**
* 获取两个List的不同元素
* @param list1
* @param list2
* @return
*/
private static List<String> getDiffrent5(List<String> list1, List<String> list2) {
long st = System.nanoTime();
List<String> diff = new ArrayList<String>();
List<String> maxList = list1;
List<String> minList = list2;
if (list2.size() > list1.size()) {
maxList = list2;
minList = list1;
}
Map<String, Integer> map = new HashMap<String, Integer>(maxList.size());
for (String string : maxList) {
map.put(string, 1);
}
for (String string : minList) {
if (map.get(string) != null) {
map.put(string, 2);
continue;
}
diff.add(string);
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1) {
diff.add(entry.getKey());
}
}
System.out.println("getDiffrent5 total times " + (System.nanoTime() - st));
return diff; } /**
* 获取两个List的不同元素
* @param list1
* @param list2
* @return
*/
private static List<String> getDiffrent4(List<String> list1, List<String> list2) {
long st = System.nanoTime();
Map<String, Integer> map = new HashMap<String, Integer>(list1.size() + list2.size());
List<String> diff = new ArrayList<String>();
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 cc = map.get(string);
if (cc != null) {
map.put(string, ++cc);
continue;
}
map.put(string, 1);
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1) {
diff.add(entry.getKey());
}
}
System.out.println("getDiffrent4 total times " + (System.nanoTime() - st));
return diff; } /**
* 获取两个List的不同元素
* @param list1
* @param list2
* @return
*/
private static List<String> getDiffrent3(List<String> list1, List<String> list2) {
long st = System.nanoTime();
Map<String, Integer> map = new HashMap<String, Integer>(list1.size() + list2.size());
List<String> diff = new ArrayList<String>();
for (String string : list1) {
map.put(string, 1);
}
for (String string : list2) {
Integer cc = map.get(string);
if (cc != null) {
map.put(string, ++cc);
continue;
}
map.put(string, 1);
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1) {
diff.add(entry.getKey());
}
}
System.out.println("getDiffrent3 total times " + (System.nanoTime() - st));
return diff;
} /**
* 获取连个List的不同元素
* @param list1
* @param list2
* @return
*/
private static List<String> getDiffrent2(List<String> list1, List<String> list2) {
long st = System.nanoTime();
list1.retainAll(list2);
System.out.println("getDiffrent2 total times " + (System.nanoTime() - st));
return list1;
} /**
* 获取两个List的不同元素
* @param list1
* @param list2
* @return
*/
private static List<String> getDiffrent(List<String> list1, List<String> list2) {
long st = System.nanoTime();
List<String> diff = new ArrayList<String>();
for (String str : list1) {
if (!list2.contains(str)) {
diff.add(str);
}
}
System.out.println("getDiffrent total times " + (System.nanoTime() - st));
return diff;
}
}
getDiffrent total times 320118400
getDiffrent3 total times 12051500
getDiffrent5 total times 6301100
getDiffrent4 total times 7527300
getDiffrent2 total times 298880900
高效的找出两个List中的不同元素的更多相关文章
- Java - Collection 高效的找出两个List中的不同元素
		如题:有List<String> list1和List<String> list2,两个集合各有上万个元素,怎样取出两个集合中不同的元素? 方法1:遍历两个集合 public ... 
- Java Collection - 003 高效的找出两个List中的不同元素
		如题:有List<String> list1和List<String> list2,两个集合各有上万个元素,怎样取出两个集合中不同的元素? 方法1:遍历两个集合 public ... 
- python——快速找出两个电子表中数据的差异
		最近刚接触python,找点小任务来练练手,希望自己在实践中不断的锻炼自己解决问题的能力. 公司里会有这样的场景:有一张电子表格的内容由两三个部门或者更多的部门用到,这些员工会在维护这些表格中不定期的 ... 
- python:找出两个列表中相同和不同的元素(使用推导式)
		#接口返回值 list1 = ['张三', '李四', '王五', '老二'] #数据库返回值 list2 = ['张三', '李四', '老二', '王七'] a = [x for x in lis ... 
- 389. Find the Difference 找出两个字符串中多余的一个字符
		[抄题]: Given two strings s and t which consist of only lowercase letters. String t is generated by ra ... 
- 使用Eclipse在Excel中找出两张表中相同证件号而姓名或工号却出现不同的的项
		1:首先把Excel中的文本复制到txt中,复制如下: A表: 证件号 工号 姓名 310110xxxx220130004 101 傅家宜3101 ... 
- C语言:对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中。-在数组中找出最小值,并与第一个元素交换位置。
		//对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中. #include <stdio.h& ... 
- 找出此产品描述中包含N个关键字的长度最短的子串
		阿里巴巴笔试题:给定一段产品的英文描述,包含M个英文字母,每个英文单词以空格分隔,无其他标点符号:再给定N个英文关键词,请说明思路并变成实现方法. String extractSummary(Stri ... 
- FCC JS基础算法题(5):Return Largest Numbers in Arrays(找出多个数组中的最大数)
		题目描述: 找出多个数组中的最大数右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组.提示:你可以用for循环来迭代数组,并通过arr[i]的方式来访问数组 ... 
随机推荐
- nodejs乱码处理
			1.处理回显乱码 res.write("<head><meta charset='utf-8'></head>"); 2.处理传参乱码 quer ... 
- ZCTF-2017 比赛总结
			这次ZCTF办的还是相当不错的,至少对于Pwn来说是能够让人学习到一些东西. 第一天做的不是很顺利,一直卡在一道题上不动.第二天队友很给力,自己的思路也开阔起来了. 关于赛题的优点 我觉得这次的Pwn ... 
- SprintBoot 1.2.8 入门
			现在SpringBoot官网Quick Start的版本是1.5.3,试了一下,报错说我JDK版本太低,查了一下说是需要JDK8,所以我使用了旧版本1.2.8,实际上在POM中的依赖配置方式一样的. ... 
- php实现https(tls/ssl)双向认证
			php实现https(tls/ssl)双向认证 通常情况下,在部署https的时候,是基于ssl单向认证的,也就是说只要客户端认证服务器,而服务器不需要认证客户端. 但在一些安全性较高的场景,如银行, ... 
- 【Codechef】BB-Billboards
			题解 传说中的--半标准杨表(行单调不增,列单调减) 如果N能整除M,我们把序列分成\(\frac{N}{M}\)段 然后里面要填K个1,显然我每一段必须填K个1,且可以构造出合法的序列,所以最少要填 ... 
- 2018年东北农业大学春季校赛 C-wyh的商机
			一天,你们wyh学长和你们zhl学长玩一个游戏,这个游戏规则是这样的 给你n个城市,保证这n个城市之间都只有一条道路可以到达. 有一件物品,在所有城市中都是一样的,但是由于各个城市的经济发展不同,导致 ... 
- homestead 无法被局域网其他电脑局域网访问解决办法
			修改(该文件就是通过git下载的homestead文件夹中的文件) homestead/scripts/homestead.rb # Configure A Private Network IP ... 
- Bootstrap css-表格
			前言:整理的东西比较基础,有不足的地方欢迎大家批评指正! 1,Bootstrap基本的表格结构 源代码: <table class="table"> <cap ... 
- Ubuntu 安装Chrome
			apt方式安装Chrome 1.添加密匙 wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key a ... 
- JZYZOJ 2043 多项式除法和取余 NTT 多项式
			http://172.20.6.3/Problem_Show.asp?id=2043 最开始用了FFT,交上去全tle和wa了(tle的比较多),测了一组数据发现求逆元的过程爆double了(毕竟系数 ... 
