网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  关于map和list的性能测试报告     
  文章作者:未知  文章来源:水木森林  
  查看:97次  录入:管理员--2007-11-17  
 
  说明:我所涉及到的试验代码,均是针对于1百万条记录,我的硬件配置如下:cpup4 1.5g,256m ddr的内存。
如果要试验其代码,要采用这种方式运行:java -xms128m -xmx250m testmap
1,对内存容量的要求
map对象高于list。因为map除了value外还需要一个object的key,从而增大了map的容量。试验代码如下:

import java.util.*;
public class testmap {
public static void main(string[] args) {
system.out.println("begin>>>>>>>>>>>>>>");
long sm = runtime.getruntime().totalmemory();
system.out.println("begin memory :" + sm);
map m = new hashtable();
//linkedlist tmplist = new linkedlist();
for (int i=0;i<1000000;i++) {
m.put(""+i,"i=" + i);
//integer integer = new integer(i);
//tmplist.add(integer);
}
long em = runtime.getruntime().totalmemory();
system.out.println("end memory :" + em);
system.out.println("end-start memory :" + (em - sm));
//walklist(tmplist);
system.out.println("<<<<<<<<<<<<<<<<end");
//find(m,"985757");
walkmap(m);
//list tmplist = new linkedlist();
//tmplist.addall(m.values());
}
}

其对比结果如下:1百万条记录map大概需要70m额外空间,而list不需要,其额外空间为0
2.遍历比较
我在试验中,发现我们经常采用遍历list的方式是一个错误的遍历方式,其性能其差无比。我们经常遍历list代码实例如下:

for(int i = 0;i<list.size();i++) {
object obj = list.get(i);
}

如果list的遍历方式换一种方式,其性能和map差不多,我们将上面的代码进行扩充,从而来比较map和list的遍历速度:

import java.util.*;
/**
* @author whxu
* @version 1.0.0 2003-4-22 am
*/
public class testmap {
public static void main(string[] args) {
system.out.println("begin>>>>>>>>>>>>>>");
long sm = runtime.getruntime().totalmemory();
system.out.println("begin memory :" + sm);
map m = new hashtable();
//linkedlist tmplist = new linkedlist();
for (int i=0;i<1000000;i++) {
m.put(""+i,"i=" + i);
//integer integer = new integer(i);
//tmplist.add(integer);
}
long em = runtime.getruntime().totalmemory();
system.out.println("end memory :" + em);
system.out.println("end-start memory :" + (em - sm));
//walklist(tmplist);
system.out.println("<<<<<<<<<<<<<<<<end");
//find(m,"985757");
walkmap(m);
//list tmplist = new linkedlist();
//tmplist.addall(m.values());
}
public static void find(map m,string key) {
long st = system.currenttimemillis();
object obj = m.get(key);
system.out.println("object:" + obj);
long et = system.currenttimemillis();
system.out.println("start time:" + st);
system.out.println("end time:" + et);
system.out.println("use time:" + (et - st));
}
public static void walkmap(map m) {
long st = system.currenttimemillis();
for(iterator it = m.values().iterator();it.hasnext();) {
object obj = it.next();
}
long et = system.currenttimemillis();
system.out.println("walkmap start time:" + st);
system.out.println("walkmap end time:" + et);
system.out.println("walkmap use time:" + (et - st));
}
public static void walklist(linkedlist l) {
long st = system.currenttimemillis();
object obj = null;
//system.out.println(l.get(3434));
/*这种遍历方式的性能其差无比,建议不要使用
for(int i=0;i<l.size();i++) {
obj = l.get(i);
}
*/
for(iterator it = l.iterator();it.hasnext();) {
obj = it.next();
}
long et = system.currenttimemillis();
system.out.println("walklist start time:" + st);
system.out.println("walklist end time:" + et);
system.out.println("walklist use time:" + (et - st));
}
}

3.随机查找。如果map知道了key,list知道了index,其性能在一百万条数据中无多大差别。其实例代码如下:

import java.util.*;
/**
* @author whxu
* @version 1.0.0 2003-4-22 am
*/
public class testmap
{
public static void main(string[] args)
{
system.out.println("begin>>>>>>>>>>>>>>");
long sm = runtime.getruntime().totalmemory();
system.out.println("begin memory :" + sm);
map m = new hashtable();
linkedlist tmplist = new linkedlist();
for (int i=0;i<1000000;i++) {
//m.put(""+i,"i=" + i);
tmplist.add("i=" + i);
}
long em = runtime.getruntime().totalmemory();
system.out.println("end memory :" + em);
system.out.println("end-start memory :" + (em - sm));
//walklist(tmplist);
system.out.println("<<<<<<<<<<<<<<<<end");
//find(m,"985757");
find(tmplist,1000000-1);
//walkmap(m);
//list tmplist = new linkedlist();
//tmplist.addall(m.values());
}
public static void find(map m,string key) {
long st = system.currenttimemillis();
object obj = m.get(key);
system.out.println("find map object:" + obj);
long et = system.currenttimemillis();
system.out.println("find map start time:" + st);
system.out.println("find map end time:" + et);
system.out.println("find map use time:" + (et - st));
}
public static void find(list l,int index) {
long st = system.currenttimemillis();
object obj = l.get(index);
system.out.println("find list object:" + obj);
long et = system.currenttimemillis();
system.out.println("find list start time:" + st);
system.out.println("find list end time:" + et);
system.out.println("find list use time:" + (et - st));
}
public static void walkmap(map m) {
long st = system.currenttimemillis();
for(iterator it = m.values().iterator();it.hasnext();) {
object obj = it.next();
}
long et = system.currenttimemillis();
system.out.println("walkmap start time:" + st);
system.out.println("walkmap end time:" + et);
system.out.println("walkmap use time:" + (et - st));
}
public static void walklist(linkedlist l) {
long st = system.currenttimemillis();
object obj = null;
//system.out.println(l.get(3434));
/*for(int i=0;i<l.size();i++) {
obj = l.get(i);
}
*/
for(iterator it = l.iterator();it.hasnext();) {
obj = it.next();
}
long et = system.currenttimemillis();
system.out.println("walklist start time:" + st);
system.out.println("walklist end time:" + et);
system.out.println("walklist use time:" + (et - st));
}
}
 
 
上一篇: 关于java异常处理(讲义)    下一篇: 关于rose的对话
  相关文档
int 和 string 互相转换的多种方法 11-17
apache 1.3.14主要变化 11-17
j2se综合:100行java代码构建一个线程池 12-24
ajax技术的安全问题不容忽视 11-17
weblogic上配置hibernate为jndi 11-16
抽象类对象类和对象包装类 11-17
sun国际认证考试--还有第二次免费考试机会 11-17
把java开发从中文windows迁移到ubuntu 11-17
利用eclipse编译aspectj项目 11-17
java swing中的键盘事件处理 11-17
java经典问题大集合 11-17
java 与.net 在前途上面的比较 11-16
通往java认证的阶梯 11-17
使用jmx监控应用程序内、外部的状况 11-16
敏捷开发技巧-消除代码异味 11-17
避免使用finalizer()函数 11-17
jbuilder 7 weblogic 6.x 详细配置(1) 11-17
java中的传值与传reference . 11-17
使用jdbc连接sybase的3种方法 11-17
浅谈java串行端口技术协议 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息