Java中Map类型是存储键值对数据的类型,在编程过程经常使用,进行遍历操作对于每个Java程序员都不会模式,下面总结两种常用的遍历方式(一种keySet,一种entrySet),通过对比让你明白使用entrySet遍历比使用keySet快。

一、使用Map.Entry

Map map = new HashMap();

Iterator iter = map.entrySet().iterator();

while (iter.hasNext()) {

Map.Entry entry = (Map.Entry) iter.next();

Object key = entry.getKey();

Object val = entry.getValue();

}

这种方式效率高,推荐使用此种方式!

二、使用Map的key进行遍历

Map map = new HashMap();

Iterator iter = map.keySet().iterator();

while (iter.hasNext()) {

Object key = iter.next();

Object val = map.get(key);

}

这种方式教第一种方式效率低,建议尽量少使用!

HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的,下面分析一个完整实例:

package Test;

import java.util.Calendar;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

public class HashMapTest {

private static int count = 10000;

public static void main(String[] args) {

//使用键进行遍历

HashMap hashmap = new HashMap();

for (int i = 0; i < count; ++i) {

hashmap.put("" + i, "thanks");

}

long bs = Calendar.getInstance().getTimeInMillis();

Iterator iterator = hashmap.keySet().iterator();

while (iterator.hasNext()) {

System.out.print(hashmap.get(iterator.next()));

}

System.out.println();

System.out.println("耗时1:"+(Calendar.getInstance().getTimeInMillis() - bs));

//换一种方案

listHashMap();

}

/**

* 使用键值对遍历

*/

public static void listHashMap() {

HashMap hashmap = new HashMap();

for (int i = 0; i < count; ++i) {

hashmap.put("" + i, "thanks");

}

long bs = Calendar.getInstance().getTimeInMillis();

Iterator> it = hashmap.entrySet().iterator();

while (it.hasNext()) {

Map.Entry entry = it.next();

// entry.getKey() 返回与此项对应的键

// entry.getValue() 返回与此项对应的值

System.out.print(entry.getValue());

}

System.out.println();

System.out.println("耗时2:"+(Calendar.getInstance().getTimeInMillis() - bs));

}

}

测试运行结果如下:

你可以发现使用entrySet明显比使用keySet快。是因为对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。

【发表评论0条 】

java中map类型_Java中Map类型遍历的两种方式对比相关推荐

  1. java操作oracle数据_Java jdbc操作oracle数据库的两种方式

    本文由广州疯狂软件java培训分享: 第一种应该是比较古老的方法了. Windows下采用JDBC-ODBC Bridge连接oracle数据库 1. 安装oracle客户端程序,在tnsnames. ...

  2. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  3. python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...

  4. python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...

  5. [Java] HashMap遍历的两种方式

    Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: Map map = new HashMap ...

  6. Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)

    Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...

  7. java hashmap遍历顺序_Java中HashMap遍历的两种方式

    第一种: Map map =  HashMap(); Iterator iter = map.entrySet().iterator(); (iter.hasNext()) { Map.Entry e ...

  8. php怎么跳转别的手机浏览器,JavaScript_JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式),随着移动互联网的不断普及, - phpStudy...

    JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式) 随着移动互联网的不断普及,企业的网络宣传不仅只局限在PC端,还要在移动端发展.我们在自己的网站做了WAP手机完整之后,如果有用户通过手机访问我 ...

  9. Java常见面试题:对象的访问定位的两种方式

    对象的访问定位的两种方式 java对象在访问的时候,我们需要通过java虚拟机栈的reference类型的数据去操作具体的对象. 由于reference类型在java虚拟机规范中只规定了一个对象的引用 ...

最新文章

  1. 考研计算机专业英语题型,考研英语一题型及分值
  2. 线性时不变系统以及响应的分类
  3. 内存泄露的原因找到了,罪魁祸首居然是 Java TheadLocal
  4. Linux 复习重点目录
  5. 素数判断的java方法_java判断数字是否是素数的方法
  6. Spring学习总结(1)- IOC
  7. Elasticsearch--进阶-进阶两种查询方式_request uri查询和query DSL查询---全文检索引擎ElasticSearch工作笔记009
  8. 《OCA认证考试指南(1Z0-061):Oracle Database 12c SQL基础》
  9. iOS - 视频开发
  10. 机器学习基础 | 有监督学习篇
  11. 世界编程语言2008年初排行榜
  12. Animator 的总结
  13. 第十八节:类与对象-构造函数和析构函数-访问控制-对象继承
  14. 学神经网络需要什么基础,神经网络从入门到精通
  15. EfficientNet网络结构详解
  16. linux文件夹英文全称,Linux--Ubuntu中文文件夹转英文
  17. java set list map_Java中的Set,List,Map
  18. 用C51单片机的外部中断设计1s定时器
  19. 微信小程序 实现实时语音识别 腾讯云
  20. 阿里云智能总裁张建锋:“全面上云的拐点到了!”

热门文章

  1. 【PostgreSQL-9.6.3】如何得到psql中命令的实际执行SQL
  2. sublime text3 保存文件时候名字后缀.dump问题解决
  3. 解决爬取网站过程中遇到的HTTP Error 302错误和中文乱码问题
  4. 【问题解决方案】visudo: /etc/sudoers is busy, try again later
  5. sql无效字符 执行sql语句报错解决方案
  6. 【问题解决】解决创建Android模拟器时提示“No system images installed for this target“的问题
  7. SQL内部连接3个表?
  8. Win7磁盘清理怎么操作?十步让你学会
  9. js中点击按钮时变色,松开后恢复原来的颜色
  10. ViewPager使用android