`
feikiss
  • 浏览: 100291 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

HashMap 中的keySet()和entrySet()方法的比较

阅读更多
在用Coverity(代码检视工具)进行代码检视时,凡是对于HashMap中使用keyset方法的地方全部报warning,说使用了低效的方法,然后建议使用entrySet替代,当时不太清楚entrySet的用法,也没管神马warning,结果发现它在每个这样使用的地方都报了warning,不得不重视了,然后就对这二者进行了一些学习,现将学习心得贴出来。。。
被警告的代码如下:
public static void setValues2SessionMap(ControllerData cd,Map<String,Object> valueMap)
	{
		Map<String,Object> sessionMap = DSViewHelper.getInstance().getSessionMap();
		for(String valName :valueMap.keySet())
		{
			String key = cd.getDeckId()+"."+valName;
			Object value = valueMap.get(valName);
			//other code here...
		}
		
	}

翻阅JDK,看entrySet()的用法,发现返回的Set对象中的泛型类型为Map.Entry<K,V>,而keySet()返回的Set对象中的泛型类型为K, 这个估计看着区别会比较晕,还是直接看代码爽快。修改后的代码:

	public static void setValues2SessionMap(ControllerData cd,Map<String,Object> valueMap)
	{
		Map<String,Object> sessionMap = DSViewHelper.getInstance().getSessionMap();
		Set<Map.Entry<String, Object>> keyEntrySet = valueMap.entrySet();
		for(Map.Entry<String, Object> entry:keyEntrySet)
		{
			String key = cd.getDeckId()+"."+entry.getKey();
			Object value = entry.getValue();
			
			//other code here...
		}
		
	}

使用后发现使用entrySet其实也挺方便的,而且按照Coverity的说法,也更加高效了,至于为何更加高效,还没有花费时间去琢磨,正如我之前的文章中 Integer.valueOf() 和new Integer()二者效率的比较http://feikiss.iteye.com/admin/blogs/1285283一样,只要愿意花时间去琢磨,肯定能有新的收获的。不过暂时木有这么多精力,还是先用再探究吧~~
0
0
分享到:
评论

相关推荐

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

    entrySet()方法适用于需要同时处理键和值的情况,keySet()方法适用于只需要键的情况,而values()方法则适用于只需要值的情况。在多线程环境下,应当考虑使用ConcurrentHashMap以保证线程安全,并通过合理选择键的...

    如何得到hashmap的索引

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

    hashMap利用iterator迭代器迭代元素方法

    在`HashMap`中,我们可以通过`entrySet()`、`keySet()`或`values()`方法获取迭代器,分别针对键值对、键或值进行迭代。 1. **使用`entrySet()`迭代**: 这是最常见的迭代方式,因为它允许同时访问键和值。首先,...

    hashmap 实例

    在本文中,我们将深入理解 HashMap 的实例及其工作原理,并与其他数据结构如 Vector、ArrayList、LinkedList 和 Hashtable 进行对比。 首先,我们来看 HashMap 的实例代码: ```java HashMap hashmap = new ...

    HashMap排序

    在给定的内容中,首先展示了一种使用匿名内部类和`Comparator`接口来对`HashMap`进行排序的方法。具体步骤如下: 1. **创建HashMap**:首先创建一个`HashMap`对象,并向其中添加一些键值对。 2. **转换为List**:将...

    HashMap的数据结构

    8. **迭代器**:HashMap提供了迭代器`keySet()`、`values()`和`entrySet()`,分别用于获取键集合、值集合和键值对集合的迭代器,方便遍历HashMap的所有元素。 9. ** equals() 和 hashCode()**:插入HashMap的键对象...

    Java-HashMap.rar_hashmap_java hashmap

    6. **迭代器遍历**:尽管遍历顺序不确定,但`HashMap`提供`keySet()`, `values()`和`entrySet()`方法来遍历键、值和键值对。 下面是一些关于`HashMap`的基本操作: - **插入键值对**:使用`put()`方法插入键值对,...

    hashmap使用实例

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

    JAVA遍历Map所有元素.doc

    JAVA遍历Map所有元素 ...我们可以使用entrySet()方法或keySet()方法来实现遍历,但是entrySet()方法的效率远远高于keySet()方法。因此,在实际开发中,我们应该尽量使用entrySet()方法来遍历Map中的所有元素。

    hashMap具体详解

    9. 其他特性:HashMap还提供了containsKey()、containsValue()、clear()等方法,以及keySet()、values()和entrySet()这三个集合视图,分别用于获取键集合、值集合和键值对集合,方便进行遍历和操作。 总的来说,...

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

    HashMap和List遍历方法及如何遍历删除元素总结 HashMap和List都是Java中最常用的数据结构,它们都可以用来存储和操作数据。然而,在遍历和删除元素时,需要小心地处理,以免出现问题。下面总结了HashMap和List的...

    hashmap.zip

    9. **遍历方式**:HashMap可以通过`keySet()`、`values()`和`entrySet()`获取三种不同类型的迭代器,分别用于遍历键、值和键值对。 10. **初始容量**:在创建HashMap时,可以通过构造函数指定初始容量。若不指定,...

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

    本文将详细介绍HashMap的遍历和使用方法,并比较HashMap和Hashtable的区别。 一、HashMap遍历方法 HashMap提供了多种遍历方法,每种方法都有其优缺: 1. 通过Map.keySet遍历key和value 这是一种简单的遍历方法,...

    HashMap遍历

    本文将深入探讨`HashMap`的遍历方法,包括`keySet()`和`entrySet()`两种主要方式,并通过代码示例对比它们的性能差异。 #### 方法一:使用`keySet()`遍历 `keySet()`方法返回`HashMap`中的所有键的集合视图。通过...

    HashMap与HashTable的区别(含源码分析)

    - `HashTable`的一些方法名使用了过时的命名约定,如`elements()`和`keys()`,而`HashMap`使用了更符合Java集合框架的`entrySet()`, `keySet()`, `values()`方法。 在实际开发中,如果对线程安全有要求,可以选择`...

    Hash Map for geeks_hashmap_Geeks_源码

    - `entrySet()`,`keySet()`和`values()`:分别返回所有键值对的集合,键的集合和值的集合。 **性能考虑:** - 哈希函数的质量直接影响HashMap的性能。良好的哈希函数应尽量避免哈希冲突,以提高查找效率。 - 加载...

    java map集合

    Map接口定义了许多方法,如put()用于添加键值对,get()用于根据键查找对应的值,remove()用于删除键值对,size()返回Map中元素的数量,keySet()和values()分别返回键集和值集,entrySet()返回所有键值对的集合。...

    HashMap资料.zip

    8. **HashMap的遍历方式**:HashMap可以通过`keySet()`、`entrySet()`和`values()`方法分别获取键的集合、键值对的集合和值的集合进行遍历,其中`entrySet()`通常是最高效的遍历方式。 9. **HashMap与HashTable的...

Global site tag (gtag.js) - Google Analytics