前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >遍历map的键值对的方法(深入浅出)

遍历map的键值对的方法(深入浅出)

作者头像
jiankang666
发布2022-05-12 21:48:05
7490
发布2022-05-12 21:48:05
举报
文章被收录于专栏:java基础笔记java基础笔记

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

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

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

代码语言:javascript
复制
Map map=new HashMap<>();
    map.put("cn", "中国");
    map.put("us", "美国");

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

代码语言:javascript
复制
for(Object key: map.keySet()) {
      String value=(String) map.get(key);
      System.out.println(key+"-"+value);
    }

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

代码语言:javascript
复制
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的键值对,然后再分别取出来

代码语言:javascript
复制
 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集合(使用泛型)

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

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

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

代码语言:javascript
复制
for(String key: map1.keySet()) {
          String value= map1.get(key);
          System.out.println(key+"-"+value);
        }

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

代码语言:javascript
复制
Iterator<String> iterator1=map1.keySet().iterator();
        while(iterator1.hasNext()) {
          String key=iterator1.next();
          String value= map1.get(key);
          System.out.println(key+"-"+value);
        }

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

代码语言:javascript
复制
 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集合。

代码语言:javascript
复制
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'}-------------------------

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

代码语言:javascript
复制
Map<String, ArrayList<Permission>> map = new HashMap<String, ArrayList<Permission>>();

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

代码语言:javascript
复制
 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);
            }
        }

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

代码语言:javascript
复制
 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+"===================");
        }

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

代码语言:javascript
复制
用户管理-[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'}]

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

以上是对map用法的理解

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java基础笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、遍历map(不使用泛型)
  • 二、遍历map集合(使用泛型)
  • 三、一个map深入的实例
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档