`
feikiss
  • 浏览: 98190 次
  • 性别: 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的keySet()方法

    今天小编就为大家分享一篇关于Java源码解析HashMap的keySet()方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    java HashMap的keyset实例

    简单地说,在keyset方法返回的set上做修改会改变原来hashmap,这也许不是你想要的,于是形成一个隐藏的bug

    HashMap 概述 精讲 .md

    看完这篇 HashMap,和面试官扯皮就没问题了 - HashMap 概述 - HashMap 和 HashTable 的区别 - 相同点 - 不同点 - HashMap 和 HashSet 的区别 ... - HashMap 中的移除方法 - 关于 HashMap 的面

    HashMap之resize()方法源码解读.docx

    HashMap之resize()方法源码解读,分两部分概述扩容方法涉及到的处理:创建新数组,将旧数组元素转移到新数组上

    (003)HashMap中红黑树TreeNode的split方法源码解读.docx

    HashMap中红黑树TreeNode的split方法源码解读,对split方法源码的上下文/变量定义,及所调用的关键方法都给出了详细解释说明,欢迎指正

    HashMap和HashTable的区别和不同

    记得刚毕业那会准备面试,看过不少面试题,里面有个说出HashMap和HashTable不同的题目,我那会面试的时候也遇到不少次这个问题,还隐约记得当时的回答是这样的: HashTable是比较旧的版本;HashTable是线程安全的,...

    HashMap和链表的查找效率比较

    工程(VS2013)主要构造了HashMap和list集合,通过查找集合中的元素对两者的效率进行比较

    HashMap介绍和使用

    HashMap介绍和使用

    hashmap中hash函数的构造问题

    hashmap中hash函数的构造问题,提供了各种构造方法。以及比较函数的构造 挺适合入门学习的

    HashMap部分源码分析

    HashMap数据结构,HashMap的构造方法,HashMap的put,HashMap的get

    HashMap与HashTable和HashSet的区别

    HashTable不支持空键值对! 而HashMap支持空键值对!

    经典讲解List和ArrayList和Vector和HashTable和HashMap区别

    经典讲解List和ArrayList和Vector和HashTable和HashMap区别

    HashMap的特点与使用方法详解.docx

    HashMap 的特点: HashMap 的键必须是唯一的,不能重复。 HashMap 的键允许为 null,但只能有一个这样的键;值可以有多个 null。...HashMap 实现了 Cloneable 和 Serializable 接口,因此可以拷贝和序列化。

    Hashmap快速比较类

    利用java里面Hashmap类的快速查找算法,比较两个文件差异内容,数万条数据只要几毫秒,当然不能跟脚本语言和C++速度进行比较了

    JNI处理hashmap,string等对象的操作

    JNI处理hashmap,string等对象的操作,别处绝对没有的

    自定义MyHashMap集合及entrySet()实现.md

    用自定义的MyHashMap彻底了解EntrySet ()方法,及put()和get()方法实现

    java中HashMap详解

    HashMap内部使用哈希表来实现,通过将键映射到哈希表中的一个位置来快速查找和插入元素。 HashMap的主要特点是: 非线程安全:如果多个线程同时访问同一个HashMap实例,可能会导致数据不一致的问题。因此,在使用...

    Hashtable和HashMap的区别:

    2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可...

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

    其主要特点是通过键的哈希值存储值,并提供了添加、获取和操作存储值的方法。 HashMap的底层数据结构是由数组和链表组成的。数组是HashMap的主体,而链表则是为了解决哈希冲突而存在的。当两个或更多的键的哈希值...

Global site tag (gtag.js) - Google Analytics