`
thisisvoa
  • 浏览: 63990 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用entrySet遍历HashMap

 
阅读更多

错误案例

现象描述: 在生成环境发现,偶尔生产环境的某台机器CPU使用率很高,经过定位发现是有一个大的HashMap(HashMap里面存放了大量数据,比如1W条)做循环引起的。

错误分析

遍历一个HashMap

for(Iterator ite = map.keySet().iterator(); ite.hasNext();){
  Object key = ite.next();
  Object value = map.get(key);
}

通过Map类的get(key)方法获取value时,会进行两次hashCode的计算,消耗CPU资源;而使用entrySet的方式,map对象会直接返回其保存key-value的原始数据结构对象,遍历过程无需进行错误代码中耗费时间的hashCode计算; 这在大数据量下,体现的尤为明显。

以下是HashMap.get()方法的源码:

    public V get(Object key) {
        if (key == null)
            return getForNullKey();
        int hash = hash(key.hashCode());
        for (Entry<K,V> e = table[indexFor(hash, table.length)];
             e!= null;
             e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
                return e.value;
        }
        return null;
    }

正确用法

正确用法:

for(Iterator ite = map.entrySet().iterator(); ite.hasNext();){
  Map.Entry entry = (Map.Entry) ite.next();
  entry.getKey();
  entry.getValue();
}

分享到:
评论

相关推荐

    Java5种遍历HashMap数据的写法

    在Java中,我们可以使用EntrySet的迭代器来遍历HashMap中的数据。其实现代码如下: ```java Iterator, String&gt;&gt; iterator = coursesMap.entrySet().iterator(); while (iterator.hasNext()) { Entry, String&gt; entry...

    java遍历HashMap简单的方法

    本篇文章将详细介绍如何使用简单的方法来遍历HashMap,通过实例代码帮助理解。 HashMap遍历的常用方法主要有三种:迭代器(Iterator)遍历、键集(KeySet)遍历以及 Entry 集(entrySet)遍历。下面将逐一介绍这些...

    基于HashMap遍历和使用方法(详解)

    3. 通过Map.entrySet遍历key和value 这是一种使用增强for循环遍历键值对的方法。 ```java for (Map.Entry, String&gt; entry : map.entrySet()) { System.out.println("key= " + entry.getKey() + " and value= " + ...

    使用多种方式实现遍历HashMap的方法

    遍历HashMap是常见的操作,本文将介绍六种不同的方法来实现这一功能。 1. **方式一:使用KeySet方法** KeySet方法返回HashMap中所有键的Set视图。由于Set接口实现了Iterable接口,我们可以使用for-each循环来遍历...

    HashMap遍历

    System.out.println("使用entrySet遍历时耗时:" + (endTime - startTime) + "ms"); ``` ### 结论 通过对比可以发现,`entrySet()`遍历`HashMap`的方法在大多数情况下都比`keySet()`方法更加高效,尤其是当涉及到...

    HashMap和List遍历方法及如何遍历删除元素总结

    使用Iterator可以遍历HashMap的所有entry,然后使用Iterator的remove方法来删除元素。 解决方法 要解决HashMap遍历删除元素的问题,可以使用Iterator来遍历HashMap,并使用Iterator的remove方法来删除元素。这样...

    怎样遍历一个HashMap?

    可以通过2种方法遍历HashMap &lt;br&gt;Map map = new HashMap(); &lt;br&gt;for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { &lt;br&gt; Map.Entry entry = (Map.Entry) iter.next(); &lt;br&gt; Object ...

    Java 实例 - HashMap遍历源代码-详细教程.zip

    - 遍历HashMap时修改HashMap(添加、删除元素)可能会导致`ConcurrentModificationException`,因为迭代器无法检测到这种并发修改。 - 使用`keySet()`遍历并删除元素是安全的,但效率较低,因为这涉及到两次查找:...

    HashMap总结

    5. 取得键值对集合:使用 entrySet() 方法取得 HashMap 中的所有键值对,并将其转换为集合。 HashMap 的遍历 1. 使用迭代器遍历:使用 iterator() 方法取得 HashMap 的迭代器,然后使用 hasNext() 和 next() 方法...

    Java HashMap 如何正确遍历并删除元素的方法小结

    Java HashMap 遍历和删除元素方法小结 Java HashMap 是一种常用的数据结构,用于存储键值对儿,但是在遍历和删除元素时,需要注意一些特殊的情况,否则可能会出现异常或错误。本文将介绍 Java HashMap 遍历和删除...

    java哈希遍历_哈希遍历_

    - 遍历HashMap时,由于内部实现细节,顺序可能不稳定,因为哈希函数可能会导致元素在数组中的顺序发生变化。如果需要稳定的遍历顺序,可以考虑使用`LinkedHashMap`,它在保持效率的同时,按照插入顺序或访问顺序遍历...

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

    通过entrySet()方法,我们可以遍历HashMap中的每个键值对(Entry)。这种方式不仅可以遍历到所有的键,还可以在单次遍历中直接获得与键相对应的值。对于需要同时处理键和值的场景,entrySet()是最为高效的方法。 **...

    如何得到hashmap的索引

    #### 遍历HashMap的方法 根据提供的内容,我们可以了解到遍历`HashMap`主要有两种方式:使用`keySet()`方法和使用`entrySet()`方法。 1. **使用keySet()方法** ```java Map map = new HashMap(); Iterator ...

    hashmap使用实例

    6. **遍历HashMap**:有两种方式遍历HashMap,一是通过`entrySet()`获取键值对的迭代器,二是通过`keySet()`获取键的迭代器再获取对应的值。 ```java for (Map.Entry, String&gt; entry : map.entrySet()) { System....

    java Map 遍历方法

    2. **遍历HashMap** 使用`entrySet()`或`keySet()`的方式同样适用于遍历`HashMap`。 ```java HashMap, Object&gt; hash = new HashMap(); hash.put(3, 3); hash.put(4, 4); hash.put(5, 5); hash.put(6, 6); ...

    JAVA遍历Map所有元素.doc

    在上述的`HashMapTest`类中,通过对比`keySet()`和`entrySet()`遍历HashMap的时间,我们可以看到`entrySet()`方法通常比`keySet()`方法更快。`keySet()`需要两次遍历:一次是转换为迭代器,另一次是从HashMap中根据...

    java中Map集合的常用遍历方法及HashMap的应用实例

    1、遍历Map.entrySet():它的每一个元素都是Map.Entry对象,这个对象中, 放着的就是Map中的某一对key-value; 2、遍历Map.keySet():它是Map中key值的集合,我们可以通过遍历这个集合来 读取Map中的元素; 3、...

    Java 实例 - 集合遍历源代码-详细教程.zip

    最后,HashMap是键值对存储的集合,遍历HashMap需要注意,因为直接遍历可能会出现并发修改异常。一般有两种方式:一是通过keySet()获取键的集合并遍历,二是通过entrySet()获取键值对的集合进行遍历: ```java ...

    Hashmap实现了Map接口的底层实现.docx

    HashMap使用一个数组配合链表(JDK 1.8以后还引入了红黑树)来存储键值对。数组的长度通常设置为2的幂次,如16,这是因为通过位运算(&运算符)进行索引计算可以达到与取模运算相同的效果,但效率更高。当不同的键...

Global site tag (gtag.js) - Google Analytics