复制代码代码如下:
公共静态无效主(字符串参数[]){
Map<String, Object> map = new HashMap<String, Object>();
地图.put(“a”,“A”);
地图.put(“b”,“B”);
地图.put(“c”,“C”);
// keySet 遍历
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
字符串键 = iterator.next();
字符串值=(字符串)map.get(键);
System.out.println(值);
}
for (字符串键:map.keySet()) {
字符串值=(字符串)map.get(键);
System.out.println(值);
}
//entrySet遍历
Iterator<Entry<String, Object>> iterator1 = map.entrySet().iterator();
while (iterator1.hasNext()) {
字符串值 = (String) iterator1.next().getValue();
System.out.println(值);
}
for (Entry<String, Object> 条目:map.entrySet()) {
字符串值=(String)entry.getValue();
System.out.println(值);
}
//
for (对象 str : map.values()) {
System.out.println(str);
}
}
关于效率问题:
如果你使用HashMap
同时遍历key和value时,keySet与entrySet方法的性能差异取决于key的具体情况,如复杂度(复杂对象)、离散度、冲突率等。换言之,取决于HashMap查找value的头部。entrySet一次性取出所有key和value的操作都是有开销的,当这个损失小于HashMap查找value的开销时,entrySet的性能优势就会体现出来。比如上面对比测试中,当key是最简单的数值高效字符串时,keySet可能反而会更多,运行比entrySet少10%。总体来说还是推荐使用entrySet。因为当key很简单的时候,其性能可能会略为低于keySet,装载是可控的;而随着key的复杂化,entrySet的优势将会明显地体现出来。当然,我们可以根据实际情况进行
只遍历key时,keySet方法更为合适,因为entrySet将无用的value也给取出来了,浪费了性能和空间。在上述测试结果中,keySet比entrySet方法运行少23%。
只遍历value时最佳,使用vlaues方法是选择,entrySet会略好于keySet方法。
如果你使用TreeMap
同时遍历key和value时,与HashMap不同,entrySet的性能与keySet不同。这是由TreeMap的查询效率决定的,此时,TreeMap查找value的增加明显,一个entrySet同时取出所有key和value的头部。因此,遍历TreeMap时强烈推荐使用entrySet方法。