`

for循环遍历HashMap的优化

    博客分类:
  • map
map 
阅读更多
for循环遍历HashMap常用的有4种方式。

通过hashMap.keySet()遍历
keySet()方法返回HashMap中的key值的集合,然后通过get()方法传入key值,可以得到key对应的value值。示例代码:

    for (Integer key : hashMap.keySet()) {
        int value = hashMap.get(key);
    }
通过hashMap.values()遍历
values()方法返回HashMap中的value值的集合。示例代码:

for (Integer v : hashMap.values()) {
    int value = v;
}
通过hashMap.entrySet()遍历 entrySet()方法返回HashMap中的key-value键值对集合。key和value一一对应,都可以获取到。示例代码:
for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
    int key = entry.getKey();
    int value = entry.getValue();
}
通过Iterator遍历
以上3中遍历方式都可以获取结果集合的迭代器(Iterator),通过Iterator.next()方法遍历结果集.示例代码:

Iterator<Integer> integerIterator = hashMap.values().iterator();
while (integerIterator.hasNext()) {
    int value = integerIterator.next();
}




package com.dashidan.profile;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
* 大屎蛋教程网-dashidan.com
* for循环中的效率优化
* Created by 大屎蛋 on 2018/5/22.
*/
public class Demo2 {
    public static void main(String[] args) {
        int count = 1000000;
        /** 初始化HashMap*/
        HashMap<Integer, Integer> hashMap = new HashMap<>();

        long t0 = System.currentTimeMillis();
        for (int i = 0; i < count; i++) {
            hashMap.put(i, i);
        }

        /** 遍历Key获取Value*/
        long t1 = System.currentTimeMillis();
        for (Integer key : hashMap.keySet()) {
            int value = hashMap.get(key);
        }

        /** 遍历value*/
        long t2 = System.currentTimeMillis();
        for (Integer v : hashMap.values()) {
            int value = v;
        }

        long t3 = System.currentTimeMillis();
        /** 遍历Entry*/
        for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
            int key = entry.getKey();
            int value = entry.getValue();
        }

        long t4 = System.currentTimeMillis();
        /** Iterator 遍历*/
        Iterator<Integer> integerIterator = hashMap.values().iterator();
        while (integerIterator.hasNext()) {
            int value = integerIterator.next();
        }

        long t5 = System.currentTimeMillis();

        System.out.println(t1 - t0);
        System.out.println(t2 - t1);
        System.out.println(t3 - t2);
        System.out.println(t4 - t3);
        System.out.println(t5 - t4);
    }
}
总体说来,HashMap的put方法耗时会多余get方法。通过遍历keySet,然后再通过key获取value的方式效率最低。其余集中方式效率差不多。

结论:

如果只需要遍历value值,推荐采用遍历values()集合的方式。
如果遍历hashmap时,key和value都需要用到,推荐采用遍历entrySet的方式.
分享到:
评论

相关推荐

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

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

    暑假培训学习笔记之java循环遍历集合

    以下是如何使用`for`循环遍历ArrayList: ```java ArrayList&lt;String&gt; list = new ArrayList(); // 添加元素... for (int i = 0; i (); i++) { String element = list.get(i); // 处理元素... } ``` 然后是增强型...

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

    - **foreach循环**:Java 5引入了增强的for循环(也称为foreach),可以直接遍历Map的键值对,例如:`for (Map.Entry, Value&gt; entry : map.entrySet()) {...}` 4. **源代码解析**: - `put`操作:当插入新的键值...

    如何遍历一个java集合

    遍历HashMap时,可以使用`keySet()`、`values()`或`entrySet()`方法获取相应的Set视图,再进行迭代。 在面试中,除了基本的遍历方式,还可能考察一些高级话题,如并发遍历(ConcurrentModificationException)、...

    DATE_FORMAT-Sql.rar_date format v2.21

    在Java中,for循环常用来遍历数组或集合,而HashMap是一种高效的数据结构,它以键值对的形式存储数据,允许我们通过键(key)快速查找对应的值(value)。这种组合可能在解决实际问题时,如数据处理、记录跟踪或状态...

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

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

    java遍历大容量map的正确方法.pdf

    对于大容量的Map,推荐使用第三种方式,即通过Map.entrySet的增强for循环遍历。这种方式避免了`get`方法的二次查询,从而提高了性能。尤其是当Map实现是哈希表,如HashMap,它会将key-value对存储为Entry对象,直接...

    java Map遍历方法

    虽然不推荐,但也可以使用传统的for循环遍历`Map`。 ```java int size = map.size(); for (int i = 0; i ; i++) { Entry, Integer&gt; entry = map.entrySet().toArray(new Entry[0])[i]; System.out.println(...

    hashmap_demo.rar_DEMO_STL hashmap_hashmap

    4. 遍历:`std::unordered_map`提供了迭代器进行遍历,可以使用`for`循环或范围基础循环遍历所有键值对。 在实际使用中,我们需要考虑的因素包括: - 哈希函数的选择和优化,以降低哈希冲突的概率。 - 键的类型应...

    java集合.docx

    - 增强for循环遍历 - 迭代器遍历 - 列表迭代器(ListIterator)遍历,允许在遍历过程中修改集合 2. **Set集合** - **特点**:Set是无序的,不允许元素重复,没有索引。 - **子类**:HashSet和TreeSet - **...

    前端开源库-hashmap

    3. **遍历机制**:支持迭代器(iterator)进行键值对的遍历,符合ES6的迭代协议,方便在for...of循环中使用。 4. **容量与负载因子**:库可能包含了调整容量和负载因子的选项,以平衡空间效率和查找速度。负载因子...

    (001)HashMap之链表转红黑树-treefyBin方法.docx

    接下来,通过`do-while`循环遍历链表,调用`replacementTreeNode`方法将链表节点转换为`TreeNode`,并添加到红黑树中: ```java do { TreeNode,V&gt; p = replacementTreeNode(e, null); if (tl == null) hd = p; ...

    Java 递归和迭代的方法详解.pdf

    2. 利用JVM的循环优化,例如,使用增强型for循环(`for-each`)和迭代器。 3. 对于大数据处理,考虑使用Java 8的`Stream` API,尤其是并行流,以利用多核处理器的优势。 4. 如果可能,使用合适的数据结构,如哈希...

    forEach.rar

    本主题主要关注的是`for`循环的性能优化,特别是针对双重`for`循环的情况。 标题“forEach.rar”可能暗示着我们将在Java 8及更高版本中探讨`forEach`方法,它是`Stream API`的一部分,它提供了一种声明式编程的方式...

    35个Java代码性能优化总结.pdf

    在遍历List集合时,如果List实现了RandomAccess接口,使用for循环通常会比使用迭代器更高效。 #### 16. 对象实例化优化 频繁地实例化同一个类型的新对象会增加垃圾回收的负担,可以考虑使用对象池来优化。 #### 17...

    javatraining:Java遍历

    - 对于List,可以使用迭代器(Iterator)或增强for循环遍历: ```java List&lt;String&gt; list = Arrays.asList("A", "B", "C"); // 使用迭代器 Iterator&lt;String&gt; iterator = list.iterator(); while (iterator....

    hashmap:R中更快的哈希图

    7. **遍历HashMap**:通过`for`循环和`keys()`或`values()`函数遍历所有键或值。 8. **释放资源**:在不再使用HashMap时,记得调用`free()`函数释放内存。 HashMap在R中的应用广泛,特别是在大数据分析、统计建模...

    Java 集合框架+集合实例

    - **集合遍历**:使用迭代器或for-each循环遍历集合中的元素。 - **集合输出**:将集合内容打印到控制台。 - **List循环移动元素**:在List中移动元素的位置。 - **遍历HashTable的键值**:使用keySet()方法获取...

    java基础知识面试.pdf

    - List支持for循环遍历元素,也支持通过迭代器遍历,而Set由于其元素无序的特点,只能使用迭代器遍历。 2. HashSet如何保证元素唯一性: - HashSet是基于HashMap实现的,它使用HashMap的key来存储Set中的元素。 ...

    java学生信息管理系统

    在Java中,可以通过while或for循环遍历ResultSet,将每条记录转化为实体对象,然后传递给视图层展示。在设计视图时,可以使用JSP或Thymeleaf等技术,将数据动态绑定到页面上。 在开发过程中,考虑到系统的安全性,...

Global site tag (gtag.js) - Google Analytics