java中Map集合的四种遍历方式

Map接口和Collection接口的集合不同,Map集合是双列的,Collection是单列的.Map集合将键映射到值的对象.

双列的集合遍历起来也是比较麻烦些的,特别是嵌套的map集合,这里说下MAP集合的四种遍历方式,并且以嵌套的hashMap集合为例, 遍历一下。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;public class ThreeHashmap {public static void main(String[] args) {//内层的HashMap inter1HashMap<String, Integer> inter1 = new HashMap<String, Integer>();inter1.put("张三", 20);inter1.put("李四", 22);//内层的HashMap inter2HashMap<String, Integer> inter2 = new HashMap<String, Integer>();inter2.put("王五", 21);inter2.put("赵六", 23);//外层的HashMap out,里面的键- 值是两个HashMapHashMap<HashMap<String, Integer>, HashMap<String, Integer>> out = new HashMap<HashMap<String, Integer>, HashMap<String, Integer>>();//外层的HashMap out,放进去hashMap ,键- 值是两个HashMapout.put(inter1, inter2);

首先是两个hashMap<String, Integer>,然后是一个大的HashMap<HashMap<String, Integer>, HashMap<String, Integer>>, 里面键和值都是hasMap.然后就是去遍历

方式一:根据键找值
1,用keySet()方法 获取所有键的集合Set,
2.遍历键的集合,获取到每一个键key
3.用get(Object key)方法,根据键找到每一个对应的值,然后输出键和值

System.out.println("---方式1:Map.keySet()取得键的set集合,取得键,然后Map.get(key)取得值");Set<HashMap<String, Integer>> setout=out.keySet();for (HashMap<String, Integer> keyMap : setout) {//内层键位的hashMap,遍历Set<String> keystrSet = keyMap.keySet() ;for (String keystring : keystrSet) {Integer keyMapin = keyMap.get(keystring);System.out.println(keystring+"\t"+ keyMapin);}//get(keyMap) 获得对应的值位的 hashMap,然后重复同样的方法遍历HashMap<String, Integer> valueMap= out.get(keyMap);Set<String> set = valueMap.keySet();for (String str : set) {Integer in = valueMap.get(str);System.out.println(str+"\t"+in);}}

方式二:根据键值对对象找键和值
1.用entrySet()方法获得值对对象的集合 Set<Map.Entry<K,V>>
2,for循环遍历键值对对象的集合Set<Map.Entry<K,V>>,获得每一个键值对,
3,然后用Entry.getKey()和Entry.getValue()方法取出每个对象中的键和值

//方法2 entrysetSystem.out.println("---------方式2:Map.entrySet()配合getKey(),getValue()获得键和值------------");Set<Map.Entry<HashMap<String, Integer>, HashMap<String, Integer>>> outentrySET=out.entrySet();for (java.util.Map.Entry<HashMap<String, Integer>, HashMap<String, Integer>> entry : outentrySET) {HashMap<String, Integer> keyMap = entry.getKey();HashMap<String, Integer> valueMap = entry.getValue();Set<Map.Entry<String,Integer>> keyentrySet = keyMap.entrySet();for (Map.Entry<String, Integer> keyentry : keyentrySet) {System.out.println(keyentry.getKey()+"\t"+ keyentry.getValue());}Set<Map.Entry<String, Integer>>  valueEntrySet = valueMap.entrySet();for (Map.Entry<String, Integer> valueentry : valueEntrySet) {System.out.println(valueentry.getKey()+"\t" + valueentry.getValue());}}

方式三: 分别获得键 和 值 ,遍历输出
1. map.keySet()获得所有键的集合Set
2. Map.value()取得值的集合Collection
3. 分别用for循环遍历取得每一个键和值.
这种方法的缺点是,取得的键不能和对应的值连到一起,适合只需要键 或者值得时候.

System.out.println("-------------------方式三: Map.keySet(),Map.value()---------------------------");//方式三 map.keySet(),      Map.value()只能分别取得键和值的集合,遍历输出键和值,不能连到一起,有缺点,适合于只需要键或值得时候-//Map.keySet()键位的 hashMap for (HashMap<String, Integer> keyMap : out.keySet()) {//-Map.keySet(),Map.value()只能分别取得键和值,不能连到一起,有缺点,适合于只需要键或值得时候-for (String string : keyMap.keySet()) {System.out.println(string);}for (Integer integer : keyMap.values()) {System.out.println(integer);}}//Map.value() 获得值 的  hashMapfor (HashMap<String, Integer> hashMap : out.values()) {for (Entry<String, Integer> entry : hashMap.entrySet()) {System.out.println(entry.getKey()+"\t"+ entry.getValue());}}

方式四: 使用获得键值对对象集合+迭代器
1.用entrySet()方法获得值对对象的集合 Set<Map.Entry<K,V>>
2,然后用迭代器Iterator()遍历出每一个键-值对对象
3, 使用Entry.getKey()和Entry.getValue()方法取出每个对象中的键和值
其实和键值对对象配合增强for循环找键和值的方式类似, 没有特殊要求的时候更提倡使用键值对对象配合增强for循环.
使用迭代器的时候,仅仅写泛型的时候就挺麻烦的,如果一个地方的泛型没有写正确就会报错,这种问题需要找好久
.

//方式4System.out.println("-------------------方式四: Map.entrySet()+迭代器 +-----------------------");Iterator<Entry<HashMap<String, Integer>, HashMap<String, Integer>>> iterator = out.entrySet().iterator();while ( iterator.hasNext()) {Entry<HashMap<String, Integer>, HashMap<String, Integer>> outEntry = iterator.next();//内层键位hashMap继续用Map.entrySet()+迭代器 遍历HashMap<String, Integer> keyMap = outEntry.getKey();Iterator<Entry<String, Integer>> iteratorkeyMap = keyMap.entrySet().iterator();for ( ;iteratorkeyMap.hasNext();) {Entry<String, Integer> keyentry = iteratorkeyMap.next();System.out.println(keyentry.getKey()+"\t"+ keyentry.getValue());}//内层值位hashMap继续用迭代器+ Map.entrySet遍历HashMap<String, Integer> valueMap = outEntry.getValue();Set<Entry<String, Integer>> valueentrySet = valueMap.entrySet();Iterator<Entry<String, Integer>> iteratorvaluemap = valueentrySet.iterator();while(iteratorvaluemap.hasNext()){Entry<String, Integer> valueEntry = iteratorvaluemap.next();System.out.println(valueEntry.getKey()+"\t"+ valueEntry.getValue());}}}
}

遍历的时候,可以使用链式编程的地方,就使用链式编程,这样可以让程序看起来更简洁易懂,特别是嵌套集合遍历的时候,只是写泛型
就写到超出一行超出屏幕,看起来就头疼 .而且 map.keySet()获得的Set集合, Map.value()获得的colection集合,常常容易混淆,
还有那长长的泛型,真的看起来很冗长.那些每行都超出屏幕的代码,一眼看不到头,真的让人头痛.
其实我们知道这个集合里放的是什么类型就可以直接用链式编程获得最后的数据,这样就省去了中间的类型定义,还有那长长的泛型标记,
这样程序看起来也更简洁易懂. 这就好像我们很渴需要喝水的时候,我们需要的是快点喝水,并不会在乎我们拿到的杯子是
什么品牌,杯子的容量是多少,我们知道杯子里面是可以解渴的水,最直接的方式就是打开杯子喝水.

java中Map集合的四种遍历方式相关推荐

  1. Java中Map集合的三种遍历方式

    文章目录 Map集合的遍历方式 Map集合的遍历方式一: 键找值 Map集合的遍历方式二: 键值对 Map集合的遍历方式三: Lambda Map集合的遍历方式 Map集合的遍历方式有3种: 方式一: ...

  2. java map遍历_Java中Map集合的两种遍历方式

    Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...

  3. java中两种遍历集合的方式_Java中Map集合的两种遍历方式

    Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...

  4. Java中List集合的三种遍历方式(全网最详)

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  5. java中List集合的几种遍历方式

    本文中我们给出了List集合中的四种遍历方式,分别是for循环,迭代器循环,代码及相应的注释如下: package d1_collection;import java.util.*;public cl ...

  6. Map集合的四种遍历方式

    Map集合的遍历1-键找值 (Iterator 遍历) Map<String,String> map = new HashMap<String, String>();map.p ...

  7. Java集合篇:Map集合的几种遍历方式及性能测试

    文章目录 一.写在前面 二.正式开始探究之旅 1. Map集合一共有多少种遍历方式呢? 2.那这几种遍历方式的具体用法是啥样的呢? 2.1 keySet()方式遍历-------for循环 2.2 k ...

  8. Map集合的几种遍历方式

    Map<String ,String> map=new HashMap<String,String>(); map.put("1","value1 ...

  9. java map集合遍历方法,Java的Map集合的三种遍历方法

    集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方法各有优缺点~~ 1. package com.myTest.MapText; import java.util.Collection; i ...

  10. Java中list对象的三种遍历方式

    1.增强for循环 for(String str : list) {//其内部实质上还是调用了迭代器遍历方式,这种循环方式还有其他限制,不建议使用.System.out.println(str); } ...

最新文章

  1. 模式分类笔记--聚类分析算法
  2. C#(WinForm) + MySQL的中文编码问题(MySQL中文编码的终极解决方案)
  3. linux 再多的running也挡不住锁
  4. 绕过waf mysql爆库_iwebsec刷题记录-SQL注入漏洞
  5. 第一天:wp7多功能播放器 设计一界面设计
  6. PHPMailer如何获取企业微信授权码
  7. 购机测试软件重装上阵
  8. matlab人工鱼群捕食,Matlab从入门到精通(3)——多目标人工鱼群算法
  9. Spring之Bean作用域
  10. 三线摆法测刚体转动惯量实验结论_关于刚体转动的前概念研究
  11. UI 即 User Interface( 用户界面 ) 的简称
  12. 简明现代魔法 php,PHP生成强密码
  13. tmux 使用鼠标上下滚动
  14. WMS系统开发总结-移库管理-下架与上架
  15. CentOS 7中DHCP的介绍与搭建DHCP中继服务(理论+实践)
  16. 当excel不够用时,如何利用Access进行数据分析?
  17. 500GB 的数据库怎么发送给客户?大文件传输软件来帮忙
  18. 全球与中国海上工作服市场深度研究分析报告
  19. UILabel attributedText
  20. 【Vue】Vue 中如何点击跳转页面

热门文章

  1. 兴业银行网银签名控件官方版
  2. 北理工网络安全导论作业:DES算法
  3. 玩游戏显示计算机内存不足怎么办,电脑魔兽世界内存不足怎么办
  4. 微信HOOK之二叉树获取信息 201-12-25
  5. 安装vs产生的垃圾文件(eula.1028.txt,install.res.1028.dll,VC_RED.MSI等)
  6. CrystalReports水晶报表中的组
  7. 更换tomcat 地址栏图标
  8. 企业如何从0到1搭建BI系统
  9. 多电平双向DC/DC直流变换器的工作原理(以三电平为例子)
  10. tomcat8修改session的JSESSIONID名称