map是Java中非常常用的一种数据结构,但map不同于set和list都继承自Collection接口。

所以map没有实现Collection的Iterator 方法,自身没有迭代器来遍历元素。

构造一个map

  1. Map<String, String> map = new HashMap<String, String>();
  2. map.put("001", "hello");
  3. map.put("002", "world");
  4. map.put("003", "main");

想遍历这个map,那map通常的遍历方式有哪几种呢?

这里我们介绍常用的四种方式:keySet集合迭代,entrySet集合迭代,keySet 集合for-each 循环,entrySet集合for-each循环。

方法1 keySet集合迭代

  1. // method1
  2. Set<String> keySet = map.keySet();
  3. Iterator<String> it = keySet.iterator();
  4. while (it.hasNext()) {
  5. String key = it.next();
  6. System.out.println(key + "=" + map.get(key));
  7. }

方法2 entrySet集合迭代

  1. // method2
  2. Set<Map.Entry<String, String>> entrySet = map.entrySet();
  3. Iterator<Map.Entry<String, String>> meIt = entrySet.iterator();
  4. while (meIt.hasNext()) {
  5. Entry<String, String> entry = meIt.next();
  6. System.out.println(entry.getKey() + "=" + entry.getValue());
  7. }

方法3 keySet集合for-each循环

  1. // method3
  2. for (String key : map.keySet()) {
  3. System.out.println(key + "=" + map.get(key));
  4. }

方法4 entrySet集合for-each循环

  1. // method4
  2. for (Map.Entry<String, String> entry : map.entrySet()) {
  3. System.out.println(entry.getKey() + "=" + entry.getValue());
  4. }

四种方式中,method1 和 method2 是通过迭代器来显示完成的,method3 和 method4 是通过for-each来隐式的通过迭代器来完成的。

同时 method1 和 method3 是通过key的集合来完成的,method2 和 method4 是通过entry 的集合来完成的。

方法1 和方法2 的区别

一个是获取keySet ,一个是获取entrySet

推荐使用entrySet 的方式去获取,查看map通过key获取value的方法

  1. public V get(Object key) {
  2. if (key == null)
  3. return getForNullKey();
  4. Entry<K,V> entry = getEntry(key);
  5. return null == entry ? null : entry.getValue();
  6. }

也是先获取该key对应的entry,然后再获取value值,所以,推荐使用entrySet 方法,再遍历entry集合的方式来遍历map

map 接口还有一个方法 values() ,由于仅能取到所有的value值,而取不到key值,所以在这里就算不上遍历map了,只能算上遍历map的value值。

最新文章

  1. 【CodeVS 1199】【NOIP 2012】开车旅行
  2. 进阶学习js中的执行上下文
  3. 对Android项目中的文件夹进行解释
  4. Xcode 编辑时的爆炸效果
  5. 学习OpenCV——hand tracking手势跟踪
  6. logging
  7. Castle
  8. 使用JavaScript实现新闻滚动效果
  9. Linux下的”锁“事儿
  10. 学习嵌入式Linux有没有一个最佳的顺序(持续更新)
  11. 《JavaScript 闯关记》之 BOM
  12. 【linux】linux内核移植错误记录
  13. 了解ASP.NET 5
  14. Redis 密码设置和登录
  15. 201521123111《Java程序设计》第6周学习总结
  16. $.extend()方法和(function($){...})(jQuery)详解
  17. (luogu4180) [Beijing2010组队]次小生成树Tree
  18. java文章标题及文章相似度计算hash算法实现
  19. jenkins配置QQ邮箱自动发送RF测试构建结果通知邮件
  20. Linux高可靠技术

热门文章

  1. PythonNote01_HTML标签
  2. 模块:jquery实现表格的隔行换色
  3. 规划在sharepoint中使用安全组
  4. iOS 设置navigationBar背景
  5. jQuery Ajax 操作函数
  6. C# 6.0的新变化
  7. 在DataTable 中增加一列
  8. POJ 1113&amp;&amp;HDU 1348
  9. mysql脚本mysql_safe解释、mysql.sock文件、mysql_install_db
  10. 独立版Jexus
  11. openwrt固件支持3G和4G上网卡
  12. ReactiveSwift源码解析(一) Event与Observer代码实现
  13. JSP转译成Servlet详细过程【转】
  14. LG2292 L语言
  15. Js高级程序设计~读书笔记
  16. Linux编程 24 shell编程(结构化 if [ condition ] 数值比较,字符串比较)
  17. Codeforces Round #244 (Div. 2) C. Checkposts (tarjan 强连通分量)
  18. 使用Service组件实现简单的音乐播放器功能 --Android基础
  19. Hdu4135 Co-prime 2017-06-27 16:03 25人阅读 评论(0) 收藏
  20. PHP 命名空间与自动加载机制介绍