#架构师之性能优化篇--遍历map最优方法entrySet的迭代方式

假设创建了如下的map:

Map<String,String> map = new HashMap<String,String>();
for(int i = 1001;i<149511;i++){
	map.put(i+"",i+"");
}

遍历map有五种遍历方式,如下所示:
2.1 通过增强型for遍历keySet

long start1 = System.currentTimeMillis();
String value2 = null;
for(String key : map.keySet()){
	value2 = map.get(key);
	//System.out.print(value2+" ");
}
long end1 = System.currentTimeMillis();
System.out.println("\n耗时:"+(end1 - start1));

2.2通过迭代器遍历ketSet
l

ong start2 = System.currentTimeMillis();
Iterator<String> keySetIt =  map.keySet().iterator();
String value3 = null;
String key = null;
while(keySetIt.hasNext()){
	key = keySetIt.next();
	value3 = map.get(key);
	//System.out.print(value3+" ");
}
long end2 = System.currentTimeMillis();
System.out.println("\n耗时:"+(end2 - start2));

2.3通过values来遍历map的value值

long start3 = System.currentTimeMillis();
Collection<String> c = map.values();
Iterator<String> it = c.iterator();
String value4 = null;
for(;it.hasNext();){
	value4 = it.next();
//	System.out.print(value4+" ");
}
long end3 = System.currentTimeMillis();
System.out.println("\n耗时:"+(end3 - start3));

2.4通过增强型for的entrySet遍历key、value

String key2 = null;
String value5 = null;
long start4 = System.currentTimeMillis();
for(Entry<String,String> entry:map.entrySet()){
	key2 = entry.getKey();
	value5 = entry.getValue();
//	System.out.print(key2+" "+value5+" ");
};
long end4 = System.currentTimeMillis();
System.out.println("\n耗时:"+(end4 - start4));

2.5通过entrySet和迭代器遍历key、value

String key3 = null;
String value6 = null;
long start5 = System.currentTimeMillis();
Iterator<Entry<String,String>> mapEntryIt = map.entrySet().iterator();
Entry<String,String> entry = null;
while(mapEntryIt.hasNext()){
	entry = mapEntryIt.next();
	key3 = entry.getKey();
	value6 = entry.getValue();
//	System.out.print(key3+" "+value6+" ");
}
long end5 = System.currentTimeMillis();
System.out.println("\n耗时:"+(end5 - start5));
/**output:
耗时:28
耗时:17
耗时:13
耗时:18
耗时:11
*/

从结果我们可以看出:如果是遍历key和value,那么使用entrySet迭代器的方式遍历map效率最佳;如果只遍历value,那么可以既可以使用entrySet迭代器的方式遍历map也可以使用values遍历map。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
HashMap的几种遍历方式如下: 1. Entry遍历:使用entrySet()方法可以同时遍历Map里面的Key和Value。可以通过迭代器或者foreach循环来实现。例如: ```java HashMap<String, Integer> map = new HashMap<>(); // 添加键值对 map.put("A", 1); map.put("B", 2); map.put("C", 3); // 使用entrySet()方法遍历 for (Map.Entry<String, Integer> entry : map.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); // 处理key和value } ``` 2. keySet遍历:使用keySet()方法可以遍历Map里面的Key。可以通过迭代器或者foreach循环来实现。例如: ```java HashMap<String, Integer> map = new HashMap<>(); // 添加键值对 map.put("A", 1); map.put("B", 2); map.put("C", 3); // 使用keySet()方法遍历 for (String key : map.keySet()) { Integer value = map.get(key); // 处理key和value } ``` 3. foreach遍历:在JDK8及以上版本中,可以直接使用foreach循环来遍历HashMap的键值对。例如: ```java HashMap<String, Integer> map = new HashMap<>(); // 添加键值对 map.put("A", 1); map.put("B", 2); map.put("C", 3); // 使用foreach遍历 map.forEach((key, value) -> { // 处理key和value }); ``` 4. keySet foreach遍历:在JDK8及以上版本中,可以使用keySet()方法获取键的集合,然后使用foreach循环遍历。例如: ```java HashMap<String, Integer> map = new HashMap<>(); // 添加键值对 map.put("A", 1); map.put("B", 2); map.put("C", 3); // 使用keySet foreach遍历 for (String key : map.keySet()) { Integer value = map.get(key); // 处理key和value } ``` 以上是HashMap的几种常见遍历方式。根据具体的需求,可以选择适合的遍历方式来操作HashMap的键值对。 #### 引用[.reference_title] - *1* *3* [Java - 关于HashMap通过keySet遍历kv的二次调用问题](https://blog.csdn.net/Zong_0915/article/details/120905738)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [HashMap的七种遍历方式](https://blog.csdn.net/maojian_ohhey/article/details/115431835)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值