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

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

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.Entr
        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)在我的项目中,实现的效果是根据数据库中的数据动态显示左导航。效果图如下 :

image.png

目录
相关文章
go语言中遍历映射(map)
go语言中遍历映射(map)
299 8
|
6月前
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
328 121
|
6月前
|
安全 Java 数据库连接
让我们讲解一下 Map 集合遍历的方式
我是小假 期待与你的下一次相遇 ~
244 43
|
7月前
|
存储 安全 Go
Map的遍历与判断键是否存在-《Go语言实战指南》
本文介绍了 Go 语言中对 `map` 的常见操作,包括遍历所有项和判断键是否存在。通过 `for range` 可以遍历 `map` 的键值对、仅键或仅值(需忽略键)。注意,`map` 遍历顺序是随机的。判断键是否存在时,使用双赋值语法 `value, ok := map[key]`,其中 `ok` 表示键是否存在。直接访问不存在的键会返回类型的零值,可能导致逻辑错误。掌握这些机制可更安全高效地处理键值对数据。
|
7月前
|
安全 Java API
【Java性能优化】Map.merge()方法:告别繁琐判空,3行代码搞定统计累加!
在日常开发中,我们经常需要对Map中的值进行累加统计。}else{代码冗长,重复调用get()方法需要显式处理null值非原子操作,多线程下不安全今天要介绍的方法,可以让你用一行代码优雅解决所有这些问题!方法的基本用法和优势与传统写法的对比分析多线程安全版本的实现Stream API的终极优化方案底层实现原理和性能优化建议一句话总结是Java 8为我们提供的Map操作利器,能让你的统计代码更简洁、更安全、更高效!// 合并两个列表});简单累加。
693 0
使用 entrySet 遍历 Map 类集合 KV
使用 entrySet 遍历 Map 类集合 KV
go语言for遍历映射(map)
go语言for遍历映射(map)
413 12
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
347 2
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set

热门文章

最新文章