最近做了一个小测试,对两个集合的比较,目的是想删除出两个集合相同的数据。
分别用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编程技巧,尤其是处理递归和回溯问题的能力。
JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2)JAVA 经典算法书集合...
本教程“常用算法集合(c与java语法)”涵盖了多种经典算法,并提供了C和Java两种编程语言的实现,为学习者提供了丰富的学习资源。无论你是初学者还是有经验的开发者,都能从中受益。 首先,让我们了解一下“常用算法...
本资料集专注于"java版本大数据各种算法集合",涵盖18种经典的大数据挖掘算法及其代码实现。下面将详细讨论这些算法以及它们在实际应用中的作用。 首先,决策树(Decision Tree)是一种监督学习算法,常用于分类...
2. **Java文本比较算法**:在Java中,实现文本比对通常涉及字符串操作,如`equals()`、`contains()`等方法,但更复杂的比对需求会使用特定的算法。例如,Jaccard相似度、余弦相似度、Levenshtein距离等。 3. **...
Description: Java经典算法java经典算法java经典算法java经典算法java经典算法java经典算法java经典算法java经典算法 Tags: Java经典算法 Java经典算法合集是Java编程语言中的一些经典算法的集合,这些算法涵盖了...
Java作为一种流行的编程语言,提供了丰富的库和工具来实现各种模糊匹配算法。本篇将深入探讨如何使用Java实现模糊匹配,并介绍一些核心的概念和技术。 首先,我们要理解模糊匹配的基本原理。模糊匹配是指在两个字符...
这个文件中的Java算法题目集合涵盖了多个经典算法和编程问题,适合用来提升编程能力和算法理解。以下是对这些题目知识点的详细解释: 1. **最大公约数与最小公倍数**:求两个数的最大公约数(GCD)和最小公倍数...
Java算法全卷涵盖了基本算法和图算法,是学习和提升编程技能的重要资源。这份资料主要针对使用Java语言进行算法实现的开发者,适用于那些对ANT、EJB、J2EE、JAVA和SPRING等技术栈有了解或兴趣的人群。下面我们将深入...
Java数据挖掘18大算法实现和10大常见排序算法以及其他相关经典DM算法集合。 18大数据挖掘的经典算法以及代码实现,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面,后面都是相应算法的文章,希望能够...
本资源“经典算法Java实现”为Java学习者和研究人员提供了一套完整的算法实现集合,旨在帮助他们更好地理解和运用这些算法。 一、排序算法 1. 冒泡排序:基础排序算法,通过不断交换相邻的逆序元素来逐步理顺数组...
通过Java实现匈牙利算法,我们可以解决很多实际问题,如分配任务、调度资源、匹配市场等。在实际应用中,可能还需要对算法进行优化,例如采用早停策略,当达到一定匹配数量时停止搜索,或者在大型图中使用并行化方法...
在Java中实现FP树算法,我们可以按照以下步骤进行: 1. **数据预处理**:首先,我们需要对原始数据进行预处理,将交易数据转换为事务ID和项ID的形式,即每条记录表示一个交易,其中包含交易中出现的所有项。 2. **...
【JAVA算法题目集合程序习题】是一系列针对Java编程者设计的练习,旨在提升编程思维能力和代码编写技巧。这些题目涵盖了基础、深入和综合三种难度级别,覆盖了数学、逻辑和数据结构等多个方面。 1. **基础题**: -...
在这个Java实现中,我们将深入探讨电梯调度算法的基本原理、常见策略以及如何在Java编程环境中进行模拟。 电梯调度算法的核心目标是有效地服务楼层数字上的请求,以减少乘客的等待时间和电梯的移动距离。这个过程...
从描述来看,此Java实现可能采用了Andrew's Monotone Chain或Jarvis March,因为它们比较适合处理动态更新的点集,且效率相对较高。 1. **Graham's Scan**:首先找到一个最低点,然后按顺时针或逆时针方向排序其余...
Java KMeans聚类算法是一种广泛应用的数据挖掘技术,用于将数据集分成不同的组或“簇”,使得同一簇内的数据点彼此相似,而不同簇之间的数据点差异较大。在本例中,描述提到了从Pascal语言转换到Java实现,这意味着...
在Java实现中,可能还会利用集合框架(如ArrayList、HashSet等)来存储样本和它们的类别,以及排序算法(如快速排序或堆排序)来找到最近的邻居。同时,为了提高效率,可能会使用KD树或球树等数据结构来加速近邻搜索...
本文将深入探讨Java的核心知识,包括JVM(Java虚拟机)、线程、集合、数据库、算法以及负载均衡等多个方面。 首先,让我们从Java虚拟机(JVM)开始。JVM是Java程序运行的基石,它负责解析字节码并执行。理解JVM的...