最近做了一个小测试,对两个集合的比较,目的是想删除出两个集合相同的数据。
分别用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;
/**
* 进行比较的基础数据对象
* <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.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.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.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());
- }
- }