在用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一样,只要愿意花时间去琢磨,肯定能有新的收获的。不过暂时木有这么多精力,还是先用再探究吧~~
分享到:
相关推荐
entrySet()方法适用于需要同时处理键和值的情况,keySet()方法适用于只需要键的情况,而values()方法则适用于只需要值的情况。在多线程环境下,应当考虑使用ConcurrentHashMap以保证线程安全,并通过合理选择键的...
根据提供的内容,我们可以了解到遍历`HashMap`主要有两种方式:使用`keySet()`方法和使用`entrySet()`方法。 1. **使用keySet()方法** ```java Map map = new HashMap(); Iterator iter = map.keySet()....
在`HashMap`中,我们可以通过`entrySet()`、`keySet()`或`values()`方法获取迭代器,分别针对键值对、键或值进行迭代。 1. **使用`entrySet()`迭代**: 这是最常见的迭代方式,因为它允许同时访问键和值。首先,...
在本文中,我们将深入理解 HashMap 的实例及其工作原理,并与其他数据结构如 Vector、ArrayList、LinkedList 和 Hashtable 进行对比。 首先,我们来看 HashMap 的实例代码: ```java HashMap hashmap = new ...
在给定的内容中,首先展示了一种使用匿名内部类和`Comparator`接口来对`HashMap`进行排序的方法。具体步骤如下: 1. **创建HashMap**:首先创建一个`HashMap`对象,并向其中添加一些键值对。 2. **转换为List**:将...
8. **迭代器**:HashMap提供了迭代器`keySet()`、`values()`和`entrySet()`,分别用于获取键集合、值集合和键值对集合的迭代器,方便遍历HashMap的所有元素。 9. ** equals() 和 hashCode()**:插入HashMap的键对象...
6. **迭代器遍历**:尽管遍历顺序不确定,但`HashMap`提供`keySet()`, `values()`和`entrySet()`方法来遍历键、值和键值对。 下面是一些关于`HashMap`的基本操作: - **插入键值对**:使用`put()`方法插入键值对,...
6. **遍历HashMap**:有两种方式遍历HashMap,一是通过`entrySet()`获取键值对的迭代器,二是通过`keySet()`获取键的迭代器再获取对应的值。 ```java for (Map.Entry, String> entry : map.entrySet()) { System....
JAVA遍历Map所有元素 ...我们可以使用entrySet()方法或keySet()方法来实现遍历,但是entrySet()方法的效率远远高于keySet()方法。因此,在实际开发中,我们应该尽量使用entrySet()方法来遍历Map中的所有元素。
9. 其他特性:HashMap还提供了containsKey()、containsValue()、clear()等方法,以及keySet()、values()和entrySet()这三个集合视图,分别用于获取键集合、值集合和键值对集合,方便进行遍历和操作。 总的来说,...
HashMap和List遍历方法及如何遍历删除元素总结 HashMap和List都是Java中最常用的数据结构,它们都可以用来存储和操作数据。然而,在遍历和删除元素时,需要小心地处理,以免出现问题。下面总结了HashMap和List的...
9. **遍历方式**:HashMap可以通过`keySet()`、`values()`和`entrySet()`获取三种不同类型的迭代器,分别用于遍历键、值和键值对。 10. **初始容量**:在创建HashMap时,可以通过构造函数指定初始容量。若不指定,...
本文将详细介绍HashMap的遍历和使用方法,并比较HashMap和Hashtable的区别。 一、HashMap遍历方法 HashMap提供了多种遍历方法,每种方法都有其优缺: 1. 通过Map.keySet遍历key和value 这是一种简单的遍历方法,...
本文将深入探讨`HashMap`的遍历方法,包括`keySet()`和`entrySet()`两种主要方式,并通过代码示例对比它们的性能差异。 #### 方法一:使用`keySet()`遍历 `keySet()`方法返回`HashMap`中的所有键的集合视图。通过...
- `HashTable`的一些方法名使用了过时的命名约定,如`elements()`和`keys()`,而`HashMap`使用了更符合Java集合框架的`entrySet()`, `keySet()`, `values()`方法。 在实际开发中,如果对线程安全有要求,可以选择`...
- `entrySet()`,`keySet()`和`values()`:分别返回所有键值对的集合,键的集合和值的集合。 **性能考虑:** - 哈希函数的质量直接影响HashMap的性能。良好的哈希函数应尽量避免哈希冲突,以提高查找效率。 - 加载...
Map接口定义了许多方法,如put()用于添加键值对,get()用于根据键查找对应的值,remove()用于删除键值对,size()返回Map中元素的数量,keySet()和values()分别返回键集和值集,entrySet()返回所有键值对的集合。...
8. **HashMap的遍历方式**:HashMap可以通过`keySet()`、`entrySet()`和`values()`方法分别获取键的集合、键值对的集合和值的集合进行遍历,其中`entrySet()`通常是最高效的遍历方式。 9. **HashMap与HashTable的...