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()二者效率的比较[url]http://feikiss.iteye.com/admin/blogs/1285283[/url]一样,只要愿意花时间去琢磨,肯定能有新的收获的。不过暂时木有这么多精力,还是先用再探究吧~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值