map特点就是采用了 Key-value键值对映射的方式进行存储 。下面我们谈谈遍历map的方式。下面的内容默认读者对map集合的基本用法有所了解。

一、遍历map(不使用泛型)

不使用泛型的map的声明与赋值:

Map map=new HashMap<>();    map.put("cn", "中国");    map.put("us", "美国");

(1)使用for循环遍历,先取到key

for(Object key: map.keySet()) {      String value=(String) map.get(key);      System.out.println(key+"-"+value);    }

(2)使用Iteator迭代器拿到每个key,再拿值

Iterator iterator=map.keySet().iterator();    while(iterator.hasNext()) {      String key=(String) iterator.next();      String value=(String) map.get(key);      System.out.println(key+"-"+value);    }

(3)先拿到Map的键值对,然后再分别取出来

 Set mapset = map.entrySet();//返回的是set集合,里面的数据是obj类型,键值对类型。    for (Object object : mapset) {      Map.Entry me=(Entry) object;//拿到每一个键值对是map.entry      Object key=me.getKey();      Object value=me.getValue();      System.out.println((String)key+"-"+(String)value);    }

以上是不使用泛型的map集合,我们可以看出在取值的时候都需要强制类型转换,比较麻烦,容易出错。下面我们对以上的遍历使用泛型。

二、遍历map集合(使用泛型)

使用泛型的map的声明与赋值:

Map<String,String> map1=new HashMap<>();//对map限制写入的键值对类型都为string    map1.put("cn", "中国");    map1.put("us", "美国");

(1)对fo循环遍历进行改造。

for(String key: map1.keySet()) {          String value= map1.get(key);          System.out.println(key+"-"+value);        }

(2)对Iterator迭代器遍历进行改造。

Iterator<String> iterator1=map1.keySet().iterator();        while(iterator1.hasNext()) {          String key=iterator1.next();          String value= map1.get(key);          System.out.println(key+"-"+value);        }

(3)对第三种思路进行改造。

 Set<Map.Entry<String, String>> mapset1 = map.entrySet();//返回的是set集合,里面的数据是Map.Entry<String, String>类型,键值对类型。        for (Map.Entry<String, String>object1 : mapset1) {          System.out.println(object1.getKey()+"-"+object1.getValue());//尤其是这种,大大减少了出错和代码量        }

通过上面的对比可以看出,当我们对集合使用泛型后,参数化了类型,在编译时不符合类型的就编译报错,取值时也不用强制类型转换,减少了出错率,同时也减少了代码量。所有以后建议使用集合时,对集合使用泛型。

三、下面介绍一个map深入的实例。

在项目开发中,我需要把从数据库查到的泛型为Permission的list集合如下:根据属性permission_group_name进行分类 。这是我们需要map集合实现,将permission_group_name作为键,因为map的键底层是set集合,是无序不可重复的,然后map的值为泛型为Permission的list集合。

Permission{pid=1, pname='权限管理', permission_group_id=1, permission_group_name='用户管理', href='limit'}-------------------------Permission{pid=2, pname='黑名单管理', permission_group_id=1, permission_group_name='用户管理', href='heimingdan'}-------------------------Permission{pid=3, pname='课程审核', permission_group_id=2, permission_group_name='课程管理', href='shen.com'}-------------------------Permission{pid=4, pname='评价审核', permission_group_id=2, permission_group_name='课程管理', href='ping.com'}-------------------------Permission{pid=7, pname='信息修改', permission_group_id=3, permission_group_name='个人信息管理', href='updatemessage'}-------------------------Permission{pid=8, pname='信息查看', permission_group_id=3, permission_group_name='个人信息管理', href='seemessage'}-------------------------Permission{pid=5, pname='上传课程', permission_group_id=2, permission_group_name='课程管理', href='addcoursedescribe'}-------------------------Permission{pid=6, pname='我的课程', permission_group_id=2, permission_group_name='课程管理', href='meclass.com'}-------------------------

(1)我们声明符合我们需要的map集合。注意1使用泛型,这能减少许多麻烦,根据需求,我们的键为string类型,值为List集合。

Map<String, ArrayList<Permission>> map = new HashMap<String, ArrayList<Permission>>();

(2)我们对要操作的数据使用for循环进行遍历,往map里面添加。看不懂的话请回看map的神奇用法一文。

 for (Permission p : permissions) {            String name = p.getPermission_group_name();//拿到类中键的值对应的属性值            if (!map.containsKey(name)) {//判断map是否已经有了该键。            //没有该键的话,我们新建list,往里面存                ArrayList<Permission> mList = new ArrayList<Permission>();                mList.add(p);                map.put(name, mList);            } else {            //有该键的话,我们根据键拿到map中的list集合值,往后追加                ArrayList<Permission> pList = map.get(name);                pList.add(p);                map.put(name, pList);            }        }

(3)这样我们就完成了需求,下面我们遍历map集合,查看一下。

 Iterator iterator=map.keySet().iterator();        System.out.println("要变成的map数据");        while(iterator.hasNext()) {            String key=(String) iterator.next();            List<Permission> value=(List<Permission>) map.get(key);            System.out.println(key+"-"+value+"===================");        }

(4)结果如下:一共得到三对。

用户管理-[Permission{pid=1, pname='权限管理', permission_group_id=1, permission_group_name='用户管理', href='limit'}, Permission{pid=2, pname='黑名单管理', permission_group_id=1, permission_group_name='用户管理', href='heimingdan'}]===================个人信息管理-[Permission{pid=7, pname='信息修改', permission_group_id=3, permission_group_name='个人信息管理', href='updatemessage'}, Permission{pid=8, pname='信息查看', permission_group_id=3, permission_group_name='个人信息管理', href='seemessage'}]===================课程管理-[Permission{pid=3, pname='课程审核', permission_group_id=2, permission_group_name='课程管理', href='shen.com'}, Permission{pid=4, pname='评价审核', permission_group_id=2, permission_group_name='课程管理', href='ping.com'}, Permission{pid=5, pname='上传课程', permission_group_id=2, permission_group_name='课程管理', href='addcoursedescribe'}, Permission{pid=6, pname='我的课程', permission_group_id=2, permission_group_name='课程管理', href='meclass.com'}]

(5)在我的项目中,实现的效果是根据数据库中的数据动态显示左导航。效果图如下 :

以上是对map用法的理解,觉得不错的话关注一下吧,或者分享给需要的人。

遍历map的键值对的方法(深入浅出)相关推荐

  1. java获取map遍历,Map获取键值,Map的几种遍历方法总结(推荐)

    Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象. Map的接口 Map---实现Map Map.Entry--Map的内部类,描述Map中的按键/数值对. S ...

  2. 【笔记】python的遍历字典:遍历所有键值对(方法items())、遍历字典中的所有键(方法keys())、按特定顺序遍历字典中的所有键、遍历字典中的所有值(方法values())、函数set()

    文章目录 一.python的遍历字典 二.遍历所有键值对(方法items()) 三.遍历字典中的所有键(方法keys()) 四.按特定顺序遍历字典中的所有键 五.遍历字典中的所有值(方法values( ...

  3. java调用json转map_Java 把json对象转成map键值对的方法

    Java 把json对象转成map键值对的方法 发布于 2020-8-18| 复制链接 摘记: 工具方法: 本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据maven 引用jar包 ...

  4. GO语言————8.6 将 map 的键值对调

    8.6 将 map 的键值对调 这里对调是指调换 key 和 value.如果 map 的值类型可以作为 key 且所有的 value 是唯一的,那么通过下面的方法可以简单的做到键值对调. 示例 8. ...

  5. python字典的键可以用列表吗_python字典多键值及重复键值的使用方法(详解)

    在Python中使用字典,格式如下: dict={ key1:value1 , key2;value2 ...} 在实际访问字典值时的使用格式如下: dict[key] 多键值 字典的多键值形式如下: ...

  6. php数组只保留键值,php合并数组并保留键值的实现方法

    php合并数组,一般会使用array_merge方法. array_merge - 合并一个或多个数组 array array_merge ( array $array1 [, array $... ...

  7. php多维求组按照健值排序,PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】...

    本文实例讲述了PHP编程实现多维数组按照某个键值排序的方法.分享给大家供大家参考,具体如下: 实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第 ...

  8. php中合并数组保留键值,php合并数组并保留键值的实现方法

    下面为大家分享一篇php合并数组并保留键值的实现方法,具有很好的参考价值,希望对大家有所帮助. php合并数组,一般会使用array_merge方法. array_merge - 合并一个或多个数组 ...

  9. php数组键值一样的合并,php合并数组并保留键值 php合并数组并保留键值的实现方法...

    想了解php合并数组并保留键值的实现方法的相关内容吗,傲雪星枫在本文为您仔细讲解php合并数组并保留键值的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:php数组合并保留键值,下面大家一起 ...

最新文章

  1. Cassandra使用 —— 一个气象站的例子
  2. selenium + python自动化测试unittest框架学习(二)
  3. PCA 主成分分析 用Excel一步步演算过程详解
  4. spark 存储机制详解
  5. 科技鸿蒙系统一千章,第一千六百零七章 鸿蒙紫气,成圣之机 (上)
  6. centos7安装es mysql_Centos7 安装MySQL详细步骤
  7. android 页面计时器,Android中页面添加计时器进行的刷新
  8. LINUX设置终端窗口显示内容的滚动缓冲行数
  9. linux mysql数据库升级_Linux升级mysql到5.7
  10. PowerBuilder制作纸牌游戏
  11. python数据结构之匿名函数lambda
  12. 华为版计算机软件,Huawei华为手机PC客户端软件
  13. 新萝卜家园windows xp 安装之后fonts中字体在 word ps中不显示
  14. 多伦多计算机科学排名,2017加拿大大学专业排名:计算机科学类项目
  15. java中composition_Java基础教程之组合(composition)
  16. SQL Server 函数汉字转首字母或全拼
  17. 如何定制下载SMAP产品
  18. 2019八泉峡第二届国际露营大会即将开启
  19. OSPF特殊区域(stub、stub no-summary、nssa)
  20. LLVM之父Chris Lattner:为什么我们要重建AI基础设施软件

热门文章

  1. java findpage 方法_Java Strings.isNotBlank方法代碼示例
  2. MyBatis插入大量数据效率对比:foreach、SqlSession、sql三种方式批量插入
  3. SSM框架——Mybatis增删改查
  4. 如何用Python在图片上绘制BoundingBox
  5. Vue Vue cli
  6. 【将视频转换为动图】ps
  7. fatal error: cstdio.h: No such file or directory
  8. IELAB网络实验室 IPv6 还有多远(2)
  9. 关于c语言memset的头文件及模板
  10. Flutter 中的 Image 组件 如何加载网络图片和本地图片