`
ludaojuan21
  • 浏览: 222058 次
  • 性别: Icon_minigender_1
  • 来自: 回龙观
社区版块
存档分类
最新评论

HashMap遍历的两种方式

 
阅读更多
第一种:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry entry = (Map.Entry) iter.next();
    Object key = entry.getKey();
    Object val = entry.getValue();
}
效率高,以后一定要使用此种方式!
第二种:
Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
    Object key = iter.next();
    Object val = map.get(key);
}
效率低,以后尽量少使用!

例:
HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的,下面请看实例:

public class HashMapTest {
public static void main(String[] args) ...{
  HashMap hashmap = new HashMap();
  for (int i = 0; i < 1000; i ) ...{
   hashmap.put("" i, "thanks");
  }

  long bs = Calendar.getInstance().getTimeInMillis();
  Iterator iterator = hashmap.keySet().iterator();  
  while (iterator.hasNext()) ...{   
   System.out.print(hashmap.get(iterator.next()));
  }
  System.out.println();
  System.out.println(Calendar.getInstance().getTimeInMillis() - bs);
  listHashMap();
}

  public static void listHashMap() ...{
  java.util.HashMap hashmap = new java.util.HashMap();
  for (int i = 0; i < 1000; i ) ...{
   hashmap.put("" i, "thanks");
  }
  long bs = Calendar.getInstance().getTimeInMillis();  
  java.util.Iterator it = hashmap.entrySet().iterator();
  while (it.hasNext()) ...{
   java.util.Map.Entry entry = (java.util.Map.Entry) it.next();
   // entry.getKey() 返回与此项对应的键
   // entry.getValue() 返回与此项对应的值
   System.out.print(entry.getValue());
  }
  System.out.println();
  System.out.println(Calendar.getInstance().getTimeInMillis() - bs);
}
}

对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。

注:Hashtable的遍历方法和以上的差不多!
分享到:
评论
4 楼 hedy1986 2010-01-29  
Calendar.getInstance().getTimeInMillis()
代码短的情况下根本测不出时间差
3 楼 javaAlpha 2009-10-20  
刚才遇到个类似存放值的问题。就是一个key对应多个value的问题。验证了一下
2 楼 borball 2009-05-13  
从HashMap里面取出key对应的value应该没啥开销,所以我觉得两种效率差不多。
1 楼 脑袋雷劈的 2008-12-31  
能具体讲一下:keySet()和enterySeyt()的区别不啊?

相关推荐

    Java HashMap的三种遍历方法及优缺点含示例

    HashMap是一种基于哈希表的Map接口实现,主要用于存储键值对。它允许空值和空键。其主要特点是通过键的哈希值存储值,并提供了添加、获取和操作存储值的方法。 HashMap的底层数据结构是由数组和链表组成的。数组是...

    人工智能-项目实践-python-顺序表、链表、栈、队列、树、Hashmap等数据结构;排序、二分法查找、树遍历等常见算法实现

    顺序表、链表、栈、队列、树、...Python中的list和tuple两种类型采用了顺序表的实现技术 链表 单向链表 双向链表 单向循环链表 栈 队列 FIFO队列 LIFO队列 优先队列(Priority Queue) 双端队列(double-ended queue)

    Map

    掌握上述的每个方法的应用(采用String,Integer等JDK已提供的引用数据类型),重点掌握数据的存储及遍历的方式(两种遍历方式都要掌握) 四、深入分析HashMap的存储 深入掌握HashMap的关键技术点,如何区分是否重复...

    java编程宝典

    两种方式的卖票线程 1) 继承 Thread 类,数据无法共享 14 2) 实现 Runnable 接口,数据可以共享(推荐) 15 2.每两秒钟生成一个验证码 17 2. 抽奖小程序 21 5工具类 31 4.1 如何将一个java.util.Date转成一个java....

    sesvc.exe 阿萨德

    不然就按照链表的方式遍历匹配返回值。 从这两个核心方法(get/put)可以看出 1.8 中对大链表做了优化,修改为红黑树之后查询效率直接提高到了 O(logn)。 但是 HashMap 原有的问题也都存在,比如在并发场景下使用时...

    关于JAVA面试的100题及其答案

    Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来...

    leetcode和oj-Problem_Solutions_OJ:codeforces、UVA、Spoj、hackerearth等在线评委

    有两种方式 -&gt; 第一种是反转字符串,另一种是反转并检查(接受) 13 -罗马到整数 - 接受 20 - 有效括号 - 接受 101 - 对称树 102 - 二叉树级顺序遍历 342 -四的幂(检查提醒方法-log(n),对数解(复杂性-Java的...

    leetcode答案-DailyStudy:每日学习

    target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素 本题具有多种解法 简单一点的可以直接暴力遍历求解...

    进销存系统文档作业例子

    Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来...

    leetcode分类-ARTS:1.Algorithm:每周至少做一个leetcode的算法题2.Review:阅读并点评至少一篇英文技术文章

    求众数,两种实现方式: 1 hashmap 2 先排序,再取下标为len/2的值 分享:spark shuffle 算法: 朴素贝叶斯 决策树 第四周打卡: leetcode: 缺失的最小正整数:部分数据比较并替换,排好序后再依次遍历。 share: ...

    leetcode解码方法Python-leetcode:Leetcode的Cpp和Python解决方案的基本思想

    具体方法在第一种方案中描述。 标题 解决方案 困难 基本理念 简单的 1. 两点2. 哈希表 简单的 1. Python3中的mod和floor划分 中等的 用贪婪的思维解码映射 简单的 字符串遍历 简单的 堆 中等的 递归 简单的 双指针 ...

    java面试题

    65.2. 对象的序列化主要有两种用途: 48 65.3. 对象序列化包括如下步骤: 49 65.4. 对象反序列化的步骤如下: 49 66. 反射机制 49 66.1.1. 传统的类型转换。 49 66.1.2. 通过Class对象来获取对象的类型。 49 66.1.3....

    JAVA面试题最全集

    除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式? 37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别? 38.列举三种以上垃圾回收算法,并比较其优缺点? 39....

    leetcode实践

    17种排列组合46排序组合48排序组合78排序组合22递归创建括号回溯39个向量递归组合回溯120个向量递归组合回溯437相互调用转换度高637 BFS试图估计已经有维二维结果存储94 144 145递归实现深度遍历以及使用栈实现深度...

    超级有影响力霸气的Java面试题大全文档

     Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常...

    java 面试题 总结

    Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来...

    Leetcode的ac是什么意思-LeetCode:练习LeetCode

    Leetcode的ac是什么意思 LeetCode解题 第一题:Two Sum 这题是给你一个整数的数组,然后给你一个...第一钟解题思路就是两个for循环来遍历出每一种字串,然后将这个字串放在一个方法里来判断这个字串是否存在重复,不重

    set.list.map接口

    2. 两个实现类HashSet(LinkHashSet)和TreeSet,TreeSet有排序功能(Set set=new TreeSet();set.add(new Integer(8)); set.add(new Integer(4)); set.add(new Integer(7));)输出后的结果是:4 7 8 Eg: package test...

    疯狂JAVA讲义

    学生提问:使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大? 159 5.9 初始化块 159 5.9.1 使用初始化块 160 5.9.2 初始化块和构造器 161 5.9.3 静态初始化块 162 ...

Global site tag (gtag.js) - Google Analytics