说明:我所涉及到的试验代码,均是针对于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("<<<<<<<<<<<<<<<

//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

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("<<<<<<<<<<<<<<<

//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

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("<<<<<<<<<<<<<<<

//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

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));

}

}

posted on 2007-06-02 11:35 分享爱的空间 阅读(1296) 评论(0)  编辑  收藏

java集合性能测试,关于Map和List的性能测试相关推荐

  1. java集合课程,I学霸官方免费课程三十三:Java集合框架之Map集合

    I学霸官方免费教程三十三:Java集合框架之Map集合 Map接口 Map集合采用键值对(key-value)的方式存储数据,其中键不可以重复.值可以重复. 常用类有HashMap.TreeMap和P ...

  2. java 集合之Interface Map<K,V> HashMap实现类

    java 集合之Interface Map<K,V> 类型参数:K- 此映射所维护的键的类型:V- 映射值的类型 将键映射到值的对象. 一个映射不能包含重复的键: 每个键最多可以映射到一个 ...

  3. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  4. java集合框架07——Map架构与源代码分析

    前几节我们对Collection以及Collection中的List部分进行了分析,Collection中还有个Set,因为Set是基于Map实现的,所以这里我们先分析Map,后面章节再继续学习Set ...

  5. (Java集合框架)Map集合

    Map集合 概述 现实生活中,常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对象 ...

  6. Java集合篇:Map总结

    相关阅读: Java基础篇:hashCode的作用 Java集合篇:HashMap原理详解(JDK1.7及之前的版本) Java集合篇:HashMap原理详解(JDK1.8) Java集合篇:Hash ...

  7. java 先进先出的map_「 深入浅出 」java集合Collection和Map

    本系列文章主要对java集合的框架进行一个深入浅出的介绍,使大家对java集合有个深入的理解. 本篇文章主要具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set ...

  8. Java集合查找Map,Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  9. Java集合篇:Map集合的几种遍历方式及性能测试

    文章目录 一.写在前面 二.正式开始探究之旅 1. Map集合一共有多少种遍历方式呢? 2.那这几种遍历方式的具体用法是啥样的呢? 2.1 keySet()方式遍历-------for循环 2.2 k ...

最新文章

  1. ios开发 微博图片缩放处理错误_H5响应式开发必会之Viewport(视窗)详解
  2. group_concat
  3. Python学习笔记-day1(while流程控制)
  4. R金融统计:收益、随机行走和模拟
  5. 【LOJ】#2184. 「SDOI2015」星际战争
  6. 计算机统计知识,计算机知识在统计工作中的重要性
  7. php发表图片文章代码,PHP实现发表文章时自动保存图片_php
  8. Mac OS 添加 MySQL 环境变量
  9. PyTorch 中两大核心转置函数 transpose() 和 permute()(类似numpy的交换维度、转置)
  10. 计算机网络相关词汇,计算机网络英语词汇
  11. CodeBlocks下载安装与SDL下载使用配置教程
  12. linux 块设备 dm,[CentOS7]dm块设备删除
  13. Word 紧贴表格之后添加新行
  14. 共享计算机桌面需要密码,win10局域网共享文件需要输密码怎么办?_win10访问共享文件需要密码的解决办法-爱纯净...
  15. iOS Safari调试webview时 页面空白或者闪退解决
  16. php批量遍历读取所有文件夹的名称
  17. 后ETC时代,年入近百亿元的千方科技如何玩转车路协同
  18. 如何配合RestTemplate优雅的记录请求以及返回的信息
  19. Matlab中有与、 或、 异或的操作
  20. Chrome浏览器 - 抢票插件的制作与插件工具(下)

热门文章

  1. android 4种动画
  2. java 抽象接口_JAVA中的“抽象接口”
  3. 无比乐java游戏_传智播客Java JavaEE+物联网云计算 就业班
  4. html在线设计,快速建站 20个设计优秀的HTML网站模板(免费)
  5. 神经网络的输出层有哪些_深度学习的数学-神经网络、输入层、隐藏层、输出层...
  6. sca标准值_(整理)B超数据标准值.
  7. python运行pyc文件_python中__pyc__文件的生成和作用
  8. 牛年春节海报怎么设计?psd分层模板,给你灵感!
  9. 创意合成广告欣赏:让人脑洞大开的设计
  10. 环保公益PSD分层海报,小景合成美好世界