遍历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.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的键值对的方法(深入浅出)相关推荐
- java获取map遍历,Map获取键值,Map的几种遍历方法总结(推荐)
Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象. Map的接口 Map---实现Map Map.Entry--Map的内部类,描述Map中的按键/数值对. S ...
- 【笔记】python的遍历字典:遍历所有键值对(方法items())、遍历字典中的所有键(方法keys())、按特定顺序遍历字典中的所有键、遍历字典中的所有值(方法values())、函数set()
文章目录 一.python的遍历字典 二.遍历所有键值对(方法items()) 三.遍历字典中的所有键(方法keys()) 四.按特定顺序遍历字典中的所有键 五.遍历字典中的所有值(方法values( ...
- java调用json转map_Java 把json对象转成map键值对的方法
Java 把json对象转成map键值对的方法 发布于 2020-8-18| 复制链接 摘记: 工具方法: 本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据maven 引用jar包 ...
- GO语言————8.6 将 map 的键值对调
8.6 将 map 的键值对调 这里对调是指调换 key 和 value.如果 map 的值类型可以作为 key 且所有的 value 是唯一的,那么通过下面的方法可以简单的做到键值对调. 示例 8. ...
- python字典的键可以用列表吗_python字典多键值及重复键值的使用方法(详解)
在Python中使用字典,格式如下: dict={ key1:value1 , key2;value2 ...} 在实际访问字典值时的使用格式如下: dict[key] 多键值 字典的多键值形式如下: ...
- php数组只保留键值,php合并数组并保留键值的实现方法
php合并数组,一般会使用array_merge方法. array_merge - 合并一个或多个数组 array array_merge ( array $array1 [, array $... ...
- php多维求组按照健值排序,PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】...
本文实例讲述了PHP编程实现多维数组按照某个键值排序的方法.分享给大家供大家参考,具体如下: 实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第 ...
- php中合并数组保留键值,php合并数组并保留键值的实现方法
下面为大家分享一篇php合并数组并保留键值的实现方法,具有很好的参考价值,希望对大家有所帮助. php合并数组,一般会使用array_merge方法. array_merge - 合并一个或多个数组 ...
- php数组键值一样的合并,php合并数组并保留键值 php合并数组并保留键值的实现方法...
想了解php合并数组并保留键值的实现方法的相关内容吗,傲雪星枫在本文为您仔细讲解php合并数组并保留键值的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:php数组合并保留键值,下面大家一起 ...
最新文章
- Cassandra使用 —— 一个气象站的例子
- selenium + python自动化测试unittest框架学习(二)
- PCA 主成分分析 用Excel一步步演算过程详解
- spark 存储机制详解
- 科技鸿蒙系统一千章,第一千六百零七章 鸿蒙紫气,成圣之机 (上)
- centos7安装es mysql_Centos7 安装MySQL详细步骤
- android 页面计时器,Android中页面添加计时器进行的刷新
- LINUX设置终端窗口显示内容的滚动缓冲行数
- linux mysql数据库升级_Linux升级mysql到5.7
- PowerBuilder制作纸牌游戏
- python数据结构之匿名函数lambda
- 华为版计算机软件,Huawei华为手机PC客户端软件
- 新萝卜家园windows xp 安装之后fonts中字体在 word ps中不显示
- 多伦多计算机科学排名,2017加拿大大学专业排名:计算机科学类项目
- java中composition_Java基础教程之组合(composition)
- SQL Server 函数汉字转首字母或全拼
- 如何定制下载SMAP产品
- 2019八泉峡第二届国际露营大会即将开启
- OSPF特殊区域(stub、stub no-summary、nssa)
- LLVM之父Chris Lattner:为什么我们要重建AI基础设施软件
热门文章
- java findpage 方法_Java Strings.isNotBlank方法代碼示例
- MyBatis插入大量数据效率对比:foreach、SqlSession、sql三种方式批量插入
- SSM框架——Mybatis增删改查
- 如何用Python在图片上绘制BoundingBox
- Vue Vue cli
- 【将视频转换为动图】ps
- fatal error: cstdio.h: No such file or directory
- IELAB网络实验室 IPv6 还有多远(2)
- 关于c语言memset的头文件及模板
- Flutter 中的 Image 组件 如何加载网络图片和本地图片