`
zpball
  • 浏览: 919907 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HashMap的2中遍历方式比较

阅读更多
http://smallnetvisitor.iteye.com/blog/1729381

首先我们准备数据,准备一个map
 
Map<String, String> map = new HashMap<String, String>();  
for (int i = 0; i < 10; i++) {  
    map.put(i + "", "value" + i);  
}  

然后我们采用传说中的key遍历:
步骤:先弄成key set,然后遍历key set 通过key从map中获取value
 
Iterator<String> iterator = map.keySet().iterator();  
while (iterator.hasNext()) {  
    String key = iterator.next();  
    String val = map.get(key);  
    System.out.println(key + "->" + val);  
}  
System.out.println("*********************");  

然后我们在采用entrySet的方式遍历下:
步骤:先弄成entrySet 然后遍历他,获取key和value
Set<Entry<String, String>> set = map.entrySet();  
Iterator<Entry<String, String>> s = set.iterator();  
while (s.hasNext()) {  
    Entry<String, String> en = s.next();  
    String key = en.getKey();  
    String val = en.getValue();  
    System.out.println(key + "->" + val);  
} 

孰优孰劣?
看JDK源码,对比两种访问方式:
首先看KeySet访问方式:
  
   public Set<K> keySet() {  
if (keySet == null) {  
    keySet = new AbstractSet<K>() {  
    public Iterator<K> iterator() {  
        return new Iterator<K>() {  
        private Iterator<Entry<K,V>> i = entrySet().iterator();  
  
        public boolean hasNext() {  
            return i.hasNext();  
        }  
  
        public K next() {  
            return i.next().getKey();  
        }  
  
        public void remove() {  
            i.remove();  
        }  
                   };  
    }  
  
    public int size() {  
        return AbstractMap.this.size();  
    }  
  
    public boolean contains(Object k) {  
        return AbstractMap.this.containsKey(k);  
    }  
    };  
}  
return keySet;  
   }  

也就是调用entrySet()从entryset中获取key,也就是说是在entry set的基础上来做的,貌似多次一举
结论:
通过上述代码我们就知道,采用entrySet方式要优于keySet,因为keySet首先要访问entrySet来组建一个keySet,重复工作不言而喻
分享到:
评论

相关推荐

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

    要解决HashMap遍历删除元素的问题,可以使用Iterator来遍历HashMap,并使用Iterator的remove方法来删除元素。这样可以避免ConcurrentModificationException异常。 小结 在遍历和删除HashMap和List的元素时,需要...

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

    这段代码将抛出 `java.util.ConcurrentModificationException` 异常,因为在遍历 HashMap 的元素过程中删除了当前所在元素,下一个待访问的元素的指针也由此丢失了。 2. 正确的删除方法 正确的删除方法是使用迭代...

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

    HashMap遍历和使用方法详解 HashMap是Java中一种常用的数据结构,用于存储键值对的集合。它实现了Map接口,是基于哈希表结构的,可以快速地存储和检索数据。本文将详细介绍HashMap的遍历和使用方法,并比较HashMap...

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

    这种方式比较适合只需要使用键的场景。 **优点**:如果只需要键,这种方法可以避免不必要的值拷贝,简单直接。 **缺点**:需要额外的get()操作来获取值,增加了遍历的复杂性。 ```java for (String key : hashMap...

    HashMap遍历

    ### HashMap遍历详解 在Java编程中,`HashMap`是一种常用的数据结构,它实现了`Map`接口,提供了基于哈希表的存储方式,允许我们快速地查找、插入和删除键值对。对于`HashMap`的遍历,是进行数据处理和分析时不可或...

    Java HashMap三种循环遍历方式及其性能对比实例分析

    这种遍历方式可以直接获取HashMap中的键值对,并且可以快速地遍历整个HashMap。 二、显示调用map.entrySet()的集合迭代器遍历方式 显示调用map.entrySet()的集合迭代器是另一种遍历方式,其实现代码如下: ```...

    map遍历的四种方式及性能比较

    ### Java中遍历Map的四种方式及性能比较 在Java编程中,`Map`是一种非常重要的数据结构,用于存储键值对。对于`Map`的遍历,不同的遍历方式有着不同的性能表现以及适用场景。本文将详细介绍四种常见的遍历`Map`的...

    java哈希遍历_哈希遍历_

    在Java编程中,哈希遍历(Hash Traversal)通常是指对哈希表或映射数据结构(如HashMap)中的键值对进行访问的过程。哈希表是一种高效的数据存储方式,它通过计算对象的哈希码来快速定位数据,使得查找、插入和删除...

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

    5. **HashMap遍历注意事项**: - 遍历HashMap时修改HashMap(添加、删除元素)可能会导致`ConcurrentModificationException`,因为迭代器无法检测到这种并发修改。 - 使用`keySet()`遍历并删除元素是安全的,但...

    Java5种遍历HashMap数据的写法

    然而,在实际开发中,我们经常需要遍历HashMap中的数据以实现某些功能。下面将介绍五种遍历HashMap数据的写法,以满足不同场景下的需求。 通过EntrySet的迭代器遍历 在Java中,我们可以使用EntrySet的迭代器来遍历...

    java遍历HashMap简单的方法

    HashMap遍历的常用方法主要有三种:迭代器(Iterator)遍历、键集(KeySet)遍历以及 Entry 集(entrySet)遍历。下面将逐一介绍这些方法。 1. 迭代器遍历: HashMap提供了迭代器接口(Iterator),可以通过调用`...

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

    2、遍历Map.keySet():它是Map中key值的集合,我们可以通过遍历这个集合来 读取Map中的元素; 3、遍历Map.values():它是Map中value的集合,我们可以直接通过这个集合遍历 Map中的值,却不能读取key。

    hashMap和hashTable的区别

    - **HashMap**:在 Java 8 中引入了并行化能力,通过 `ConcurrentHashMap` 的实现方式,提高了多线程环境下的性能。 - **HashTable**:由于其同步策略,不适用于高并发场景。 9. **迭代器**: - **HashMap**:...

    struts2中的map遍历

    在Struts2中,Map遍历是一个常见的功能,它允许开发者动态地展示或操作存储在Map中的数据。这个功能在处理表单提交、传递参数或者在视图层展示数据时尤为有用。 首先,让我们理解Map遍历的基本概念。Map是一种键值...

    HashMap总结

    2. 使用 foreach 遍历:使用 foreach 语句遍历 HashMap 中的元素。 HashMap 的常用方法 1. clear():清空 HashMap 中的所有元素。 2. isEmpty():检查 HashMap 是否为空。 3. size():取得 HashMap 中的元素数量。...

    FLEX HashMap遍历并取到需要的值

    标题中提到的"FLEX HashMap遍历并取到需要的值",是指在编程中如何使用Java语言的HashMap集合类型进行遍历,并且从中取得符合特定条件的数据值。HashMap是一种基于哈希表的Map接口实现,它允许我们存储键值对,其中...

    1.HashSet和HashMap遍历.md

    自己写的例子,关于HashSet遍历和HashMap遍历的. 感谢大家参考

    怎样遍历一个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 ...

    map遍历的四种方法

    本文将详细介绍四种不同的遍历`Map`的方式,并通过具体的代码示例来解释每种方法的特点及适用场景。 #### 一、通过`Map.keySet()`遍历键和值 这种方法首先获取`Map`的所有键集合(`keySet`),然后通过迭代器或者...

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

    2. **方式二:使用Values方法** Values方法返回HashMap中所有值的Collection视图。与KeySet类似,由于Collection接口实现了Iterable,我们同样可以使用for-each循环来遍历并打印每个值。这种方式只能获取值,不能...

Global site tag (gtag.js) - Google Analytics