我的日常

登录/注册
您现在的位置:论坛 资料库 JAVA开发 > Java中HashMap的四种遍历方法,及效率比较
总共48087条微博

动态微博

查看: 1228|回复: 0

Java中HashMap的四种遍历方法,及效率比较

[复制链接]

326

主题

72

听众

999

金钱

实习版主

该用户从未签到

优秀版主

跳转到指定楼层
楼主
发表于 2016-12-15 14:53:11 |只看该作者 |正序浏览
  1. package com.zhenzhigu.com;

  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.Map.Entry;

  5. public class MapTest {
  6.     public static void main(String[] args){
  7.         HashMap<Integer, String> map = new HashMap<Integer, String>();
  8.         for (int i=0; i<40000; i++){
  9.             map.put(i, "第"+i+"个");
  10.         }
  11.         //循环第一种
  12.         long t1 = System.nanoTime();
  13.         Object key[] = map.keySet().toArray();
  14.         for (int i=0; i<map.size();i++){
  15.             map.get(key[i]);
  16.         }
  17.         long t2 = System.nanoTime();
  18.         //循环第二种
  19.         for(Entry<Integer, String> entry:map.entrySet()){
  20.             entry.getValue();
  21.         }
  22.         long t3 = System.nanoTime();
  23.         //循环第三种
  24.         Iterator<Integer> it = map.keySet().iterator();
  25.         while(it.hasNext()){
  26.             Integer ii = (Integer)it.next();
  27.             map.get(ii);
  28.         }
  29.         long t4 = System.nanoTime();
  30.         //循环第四种
  31.         for (Integer kk :map.keySet()){
  32.             map.get(kk);
  33.         }
  34.         long t5 = System.nanoTime();
  35.         System.out.println("第一种方法耗时:" + (t2-t1)/1000 + "微秒");
  36.         System.out.println("第二种方法耗时:" + (t3-t2)/1000 + "微秒");
  37.         System.out.println("第三种方法耗时:" + (t4-t3)/1000 + "微秒");
  38.         System.out.println("第四种方法耗时:" + (t5-t4)/1000 + "微秒");
  39.     }
  40. }
复制代码
输出结果:
第一种方法耗时:101918微秒
第二种方法耗时:49042微秒
第三种方法耗时:82706微秒
第四种方法耗时:75093微秒


把上述的1000000改成10,输出结果如下:
第一种方法耗时:806微秒
第二种方法耗时:453微秒
第三种方法耗时:19微秒
第四种方法耗时:17微秒

改为100:
第一种方法耗时:909微秒
第二种方法耗时:631微秒
第三种方法耗时:154微秒
第四种方法耗时:141微秒

经测试,第三种方法和第四种方法耗时基本差不多,当数据上万时,第二种方法的效率更高。


科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表