最近做了一个小测试,对两个集合的比较,目的是想删除出两个集合相同的数据。
分别用List、Map、和Set进行测试
利用List比较
10000用户的数据(6000相同的用户,4000不同的用户),完成比较的时间共耗时1531毫秒
100000用户的数据(60000相同的用户,40000不同的用户),完成比较的时间共耗时143735毫秒
利用Map比较
10000用户的数据(60000相同的用户,40000不同的用户),完成比较的时间共耗时172毫秒
100000用户的数据(60000相同的用户,40000不同的用户),完成比较的时间共耗时359毫秒
利用Set比较
10000用户的数据(60000相同的用户,40000不同的用户),完成比较的时间共耗时78毫秒
100000用户的数据(60000相同的用户,40000不同的用户),完成比较的时间共耗时156毫秒
package com.test;
/**
* 进行比较的基础数据对象
* <br>
*文件名:User.java<br>
*@author 董利伟<br>
*版本:<br>
*描述:<br>
*创建时间:Mar 25, 2009 9:06:26 PM<br>
*文件描述:<br>
*修改者:<br>
*修改日期:<br>
*修改描述:<br>
*/
public class User {
private String name = "";
private String id = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getKey(){
return this.name + "&" + this.id;
}
public int hashCode(){
int hash = 1;
hash += this.id.hashCode();
hash += this.name.hashCode();
return hash;
}
}
package com.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
/**
* 主要用于初始化集合(其中List的数据是从Map中获取是因为数据在Map中是无序的)
* <br>
*文件名:CreateUser2.java<br>
*@author 董利伟<br>
*版本:<br>
*描述:<br>
*创建时间:Mar 25, 2009 9:33:17 PM<br>
*文件描述:<br>
*修改者:<br>
*修改日期:<br>
*修改描述:<br>
*/
public class CreateUser2 {
public static Map UserMapA = new HashMap();
public static Map UserMapB = new HashMap();
public static HashSet UserSetA = new HashSet();
public static HashSet UserSetB = new HashSet();
public static List UserListA = new ArrayList();
public static List UserListB = new ArrayList();
public static int aa = 60000;//相同的用户数
public static int bb = 40000;//不相同的用户数
public static void CreateUserList(){
String name = "张三";
int count = 0;
//制作600个相同的用户
for(int i = 0 ; i < aa ;i++){
User user = new User();
user.setId(i+"");
user.setName(name+i);
UserListA.add(user);
UserListB.add(user);
count++;
}
//制作400个不相同的用户
int test = count;
for(int i = test ; i < bb +test ;i++){
User user = new User();
user.setId(i+"");
user.setName(name+i);
UserListA.add(user);
count++;
}
test = count;
for(int i = test ; i < bb +test ;i++){
User user = new User();
user.setId(i+"");
user.setName(name+i);
UserListB.add(user);
count++;
}
}
public static void CreateUserMap(){
String name = "张三";
int count = 0;
//制作600个相同的用户
for(int i = 0 ; i < aa ;i++){
User user = new User();
user.setId(i+"");
user.setName(name+i);
UserMapA.put(user.getKey(), user);
UserMapB.put(user.getKey(), user);
count++;
}
//制作400个不相同的用户
int test = count;
for(int i = test ; i < bb +test ;i++){
User user = new User();
user.setId(i+"");
user.setName(name+i);
UserMapA.put(user.getKey(), user);
count++;
}
test = count;
for(int i = test ; i < bb +test ;i++){
User user = new User();
user.setId(i+"");
user.setName(name+i);
UserMapB.put(user.getKey(), user);
count++;
}
}
public static void CreateUserSet(){
String name = "张三";
int count = 0;
//制作600个相同的用户
for(int i = 0 ; i < aa ;i++){
User user = new User();
user.setId(i+"");
user.setName(name+i);
UserSetA.add(user);
UserSetB.add(user);
count++;
}
//制作400个不相同的用户
int test = count;
for(int i = test ; i < bb +test ;i++){
User user = new User();
user.setId(i+"");
user.setName(name+i);
UserS[b][/b]etA.add(user);
count++;
}
test = count;
for(int i = test ; i < bb +test ;i++){
User user = new User();
user.setId(i+"");
user.setName(name+i);
UserSetB.add(user);
count++;
}
}
}
package com.test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 对List测试
* <br>
*文件名:Test.java<br>
*@author 董利伟<br>
*版本:<br>
*描述:<br>
*创建时间:Mar 25, 2009 8:16:21 PM<br>
*文件描述:<br>
*修改者:<br>
*修改日期:<br>
*修改描述:<br>
*/
public class TestList {
public static void execute(){
List test = new ArrayList();
for(int i = 0 ; i < CreateUser2.UserListA.size();i++){
test.add(CreateUser2.UserListA.get(i));
}
CreateUser2.UserListA.removeAll(CreateUser2.UserListB);
CreateUser2.UserListB.removeAll(test);
}
public static void main(String[] args) {
long begin = new Date().getTime();
CreateUser2.CreateUserList();
long end = new Date().getTime();
System.out.println("形成模拟数据共耗时" + (end - begin) + "毫秒");
System.out.println("运算前");
System.out.println("CreateUser2.UserListA.size()=" + CreateUser2.UserListA.size());
System.out.println("CreateUser2.UserListB.size()=" + CreateUser2.UserListB.size());
begin = new Date().getTime();
execute();
end = new Date().getTime();
System.out.println("比较用户共耗时" + (end - begin) + "毫秒");
System.out.println("运算后");
System.out.println("CreateUser2.UserListA.size()=" + CreateUser2.UserListA.size());
System.out.println("CreateUser2.UserListB.size()=" + CreateUser2.UserListB.size());
}
}
package com.test;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.test.CreateUser2;
/**
* 对Map测试<br>
*文件名:Test.java<br>
*@author 董利伟<br>
*版本:<br>
*描述:<br>
*创建时间:Mar 25, 2009 8:16:21 PM<br>
*文件描述:<br>
*修改者:<br>
*修改日期:<br>
*修改描述:<br>
*/
public class TestMap {
public static void execute(){
//备份用户组b
Map m = new HashMap();
Iterator itt = CreateUser2.UserMapB.entrySet().iterator();
while (itt.hasNext()) {
Map.Entry entry = (Map.Entry) itt.next();
Object key = entry.getKey();
Object value = entry.getValue();
m.put(key, value);
}
Iterator it = CreateUser2.UserMapA.entrySet().iterator();
int count = 0;
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
Object key = entry.getKey();
if(CreateUser2.UserMapB.get(key)!= null){
count++;
CreateUser2.UserMapB.remove(key);
}
}
Iterator itm = m.entrySet().iterator();
while (itm.hasNext()) {
Map.Entry entry = (Map.Entry) itm.next();
Object key = entry.getKey();
if(CreateUser2.UserMapA.get(key)!= null){
count++;
CreateUser2.UserMapA.remove(key);
}
}
System.out.println(count);
}
public static void main(String[] args) {
long begin = new Date().getTime();
CreateUser2.CreateUserMap();
long end = new Date().getTime();
System.out.println("形成模拟数据共耗时" + (end - begin) + "毫秒");
System.out.println("运算前");
System.out.println("CreateUser2.UserMapA.size()=" + CreateUser2.UserMapA.size());
System.out.println("CreateUser2.UserMapA.size()=" + CreateUser2.UserMapB.size());
begin = new Date().getTime();
execute();
end = new Date().getTime();
System.out.println("比较用户共耗时" + (end - begin) + "毫秒");
System.out.println("运算后");
System.out.println("CreateUser2.UserMapA.size()=" + CreateUser2.UserMapA.size());
System.out.println("CreateUser2.UserMapB.size()=" + CreateUser2.UserMapB.size());
}
}
package com.test;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
* 对Set测试<br>
*文件名:TestSet.java<br>
*@author 董利伟<br>
*版本:<br>
*描述:<br>
*创建时间:Mar 25, 2009 9:40:40 PM<br>
*文件描述:<br>
*修改者:<br>
*修改日期:<br>
*修改描述:<br>
*/
public class TestSet {
public static void execute(){
//备份用户组b
Set m = new HashSet();
Iterator itt = CreateUser2.UserSetA.iterator();
while (itt.hasNext()) {
User user = (User) itt.next();
m.add(user);
}
CreateUser2.UserSetA.removeAll(CreateUser2.UserSetB);
CreateUser2.UserSetB.removeAll(m);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
long begin = new Date().getTime();
CreateUser2.CreateUserSet();
long end = new Date().getTime();
System.out.println("形成模拟数据共耗时" + (end - begin) + "毫秒");
System.out.println("运算前");
System.out.println("CreateUser2.UserSetA.size()=" + CreateUser2.UserSetA.size());
System.out.println("CreateUser2.UserSetB.size()=" + CreateUser2.UserSetB.size());
begin = new Date().getTime();
execute();
end = new Date().getTime();
System.out.println("比较用户共耗时" + (end - begin) + "毫秒");
System.out.println("运算后");
System.out.println("CreateUser2.UserSetA.size()=" + CreateUser2.UserSetA.size());
System.out.println("CreateUser2.UserSetB.size()=" + CreateUser2.UserSetB.size());
}
}
分享到:
相关推荐
JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1)JAVA 经典算法集合(1),JAVA 经典...
JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2)JAVA 经典算法书集合...
给定数组,在计算出所有不同划分个数的算法能够把其所有划分情况列出!Eclipse项目源码!
JAVA算法题目集合.pdf
JAVA,算法,题目集合,适合练习思维能力,以及代码编写能力
1.插入排序(直接插入排序、折半插入排序、希尔排序); 2.交换排序(冒泡泡排序、快速排序); 3.选择排序(直接选择排序、堆排序); 4.归并排序; 5.基数排序
Java数据挖掘18大算法实现和10大常见排序算法以及其他相关经典DM算法集合。 18大数据挖掘的经典算法以及代码实现,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面,后面都是相应算法的文章,希望能够...
不错的算法教程,网页格式有插图,c与java两种语法
NULL 博文链接:https://wuzq1223.iteye.com/blog/1564290
算法大集合 多种算法java编写 简单易学
java 核心知识 包含 JVM 线程 集合 数据库 算法 负载等一系列知识点 知识点很全
里面写了 很多种java排序算法 希望可以帮到需要的人呢
18大数据挖掘的经典算法以及代码实现,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面,后面都是相应算法。
河内塔 费式数列 巴斯卡三角形 三色棋 老鼠走迷官(一) 老鼠走迷官(二) 骑士走棋盘 八个皇后 八枚银币 生命游戏 字串核对 双色、三色河内塔 背包问题(Knapsack Problem)
Java语言实现,jdk要求5.0 实现了生成频繁项集,然后产生强关联规则。通过读文件获取事务集合,然后将强关联规则输出到文件。支持度和可信度可以自己设置
算法设计与分析(java) 王晓东 完整版下载
计算几何求凸包的java代码,运行可用,可以鼠标任意点击去点,并绘制离散点的最大凸包。
Java 算法源码集合 源码是网上收集的,有错误在所难免。
java j2me 经典算法集合 附带A*算法哦 QQ5267621
集合划分问题的java精简源代码,含有算法思想。只需在工程下创建BELL0.IN文件读入数据。