Map集合遍历的五种方式【entrySet-keySet-Lambda-Stream-map.values】_iqqcode的博客-程序员秘密

技术标签: # Jopic  hashmap遍历  迭代器  Map遍历  hashmap  

在这里插入图片描述

Map集合是我们几乎每天都要使用的集合类,但是其无法像数组那样直接遍历,而是通过迭代器来遍历。以下列举五种遍历方式,推荐使用第一种。

1. EntrySet

entrySet是 key-value 的集合,Set里面的类型是Map.Entry,就是存放Map中的某一对key-value,一般可以通过map.entrySet()得到。

  • entrySet实现了Set接口,里面存放的是键值对。一个K对应一个V。

  • 即通过getKey()得到K,getValue()得到V

for-each 和 迭代器两种遍历

/**
 * 【EntrySet】
 * 通过Map.Entry(String,String)来映射结果集
 * - 然后使用entry.getKey()获取到键
 * - 通过entry.getValue()获取到值
 */
 
@Test
public void test1() {
    
    Map<String, String> map = new HashMap<>();
    map.put("张三", "内蒙古");
    map.put("李四", "北京");
    map.put("王五", "上海");
    map.put("赵六", "杭州");
    map.put("田七", "南京");
    
    //增强for遍历
    //entry.getKey()获取到键,通过entry.getValue()获取到值
    for (Map.Entry<String, String> entry : map.entrySet()) {
    
        System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
    }
    
    System.out.println("========================分割线==============================");
    
    //迭代器遍历
    Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
    while (it.hasNext()) {
    
        Map.Entry<String, String> entry = it.next();
        System.out.println("键key :" + entry.getKey() + " value :" + entry.getValue());
    }
}

2. keySet获取key结果集

通过map.keySet()获取key的结果集,Set里面的类型即key的类型

  • 通过key找到value

for-each 和 迭代器两种遍历

/**
 * 【KeySet】: 将HashMap中的key取出放入到Set集合中,根据key映射value
 * - 通过map.keySet()获取key
 * - 通过key找到value
 */
 
@Test
public void test2() {
    
    Map<String, String> map = new HashMap<>();
    map.put("张三", "内蒙古");
    map.put("李四", "北京");
    map.put("王五", "上海");
    map.put("赵六", "杭州");
    map.put("田七", "南京");
    
    //通过map.keySet()获取key, 通过key找到value
    for (String key : map.keySet()) {
    
        String value = map.get(key);
        System.out.println("key:" + key + " value:" + value);
    }
    
    System.out.println("========================分割线==============================");
    
    Iterator<String> iterator = map.keySet().iterator();
    while (iterator.hasNext()) {
    
        String key = iterator.next();
        System.out.println(key);
        System.out.println(map.get(key));
    }
}

3. Lambda-forEach

通过Map.Entry(String,String)来映射结果集,然后使用entry.getKey()获取到键,通过entry.getValue()获取到值

/**
 * 【Lambda】
 * JDLK8 后Map默认的迭代
 */
 
@Test
public void test3() {
    
    Map<String, String> map = new HashMap<>();
    map.put("张三", "内蒙古");
    map.put("李四", "北京");
    map.put("王五", "上海");
    map.put("赵六", "杭州");
    map.put("田七", "南京");
    // key-value的类型省略
    map.forEach((key, value) -> {
    
        System.out.println("key:" + key + " value:" + value);
    });
}

4. Stream-forEach

/**
 * 【Streams API 单线程】
 */
 
@Test
public void test4() {
    
    Map<String, String> map = new HashMap<>();
    map.put("张三", "内蒙古");
    map.put("李四", "北京");
    map.put("王五", "上海");
    map.put("赵六", "杭州");
    map.put("田七", "南京");
    map.put("贾七", "南京");
    // 遍历
    map.entrySet().stream().forEach((entry) -> {
    
        System.out.println(entry.getKey());
        System.out.println(entry.getValue());
    });
}

5. key和value分开遍历

Set集合分别获取key与value – key不能重复, key-value顺序不对应

  • 遍历map的键
  • 获取map的值的集合 [map.values ->返回 Collections]
/**
 * 【Set集合分别获取key与value -- key不能重复, key-value顺序不对应】
 * - 遍历map的键[]
 * - 遍历map的值
 */
 
@Test
public void test5() {
    
    Map<String, String> map = new HashMap<>();
    map.put("张三", "内蒙古");
    map.put("李四", "北京");
    map.put("王五", "上海");
    map.put("赵六", "杭州");
    map.put("田七", "南京");
    map.put("郑八", "南京");
    
    //第三种只遍历键或者值,通过加强for循环
    //遍历map的键
    for (String key : map.keySet()) {
    
        System.out.println("key: " + key);
    }
    
    //获取到 map的value集合
    Collection<String> values = map.values();
    for (String value : map.values()) {
    
        System.out.println("value: " + value);
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43232955/article/details/108298374

智能推荐

5. Longest Palindromic Substring最长子回文字符串Python_weixin_...的博客-程序员秘密

给定字符串s,找到s中最长的回文子字符串。您可以假设s的最大长度为1000。Input Output "" "" "abc" "a" "ababc" "bab" Method 1 建立两个循环, 遍历每个子字符串判断是否为palindromic1. 如果字符串为空则需要返回空2. 如果字符串没有回文,则需要返回第一个字母3. 如果后面的palindromic substring比之前的长度长, 需要替换掉之前的判断是否为回文用125题的方法, 将字

最近出现的asp.net中asp.net“未能找到类型或命名空间名称“MySql”(是否缺少 using 指令或程序集引用?”)_未能在全局命名空间中找到类型或命名空间名称mysql_hongyunqing1994的博客-程序员秘密

        因为网站中用到了MySql.Data.dll这一引用,所以出现这样问题总是把眼光放在该控件引用的不当上。但是以前这种也是直接放在网站的Bin文件夹中,用的也是同样的控件,并没有其他操作。纠结了半天愣是没搞清楚问题出现在哪儿。突然发现项目的资源管理器出现了两行网站文件夹名字。第一行是项目名字,第二行怎么还有一个文件夹。才醒悟过来,原来是在保存文件的时候,在网站文件夹的外面又添加了一层...

【Codeforces Round #716 (Div. 2)】Codeforces-1514ABC_JophieQu的博客-程序员秘密

A. Perfectly Imperfect Array多个完全平方数的乘积也是完全平方数。如要找到一个非空子序列的乘积不是完全平方数的话,只要原序列中存在非完全平方数即可。void solves(){ int n,po;cin&gt;&gt;n; int flag=0; while(n--){ cin&gt;&gt;po; int i=(int)sqrt(po); if(i*i!=po) flag=1; } cout&lt;&lt;(!flag ? "NO":"YES")&lt;

Sharding-JDBC中使用的分布式自增ID算法snowflake_shardingjdbc snowflake_Pagegle李的博客-程序员秘密

snowflake的结构如下(每部分用-分开):0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,最后12位是...

Docker下安装Solr_weixin_34372728的博客-程序员秘密

下载镜像执行:docker pull solr:7.5.0启动Solr容器执行:docker run --name my-solr -d -p 8983:8983 -t solr:7.5.0访问Solr管理后台在浏览器中打开http://localhost:8983/solr/#/,即可进入solr管理界面新建SolrCore新建solrCore,名称为mycore,执...

VirtualBox+Vagrant+centos7安装教程_时间·从来不等候的博客-程序员秘密

第一步 安装VirtualBox1.去官网下载VirtualBox,VirtualBox官网链接2.点击下载3.选择版本4.傻瓜式安装第二步 安装Vagrant1.去官网下载官方网站地址2.验证是否安装成功,打开cmd 输入vagrant -v3.添加centos7.box文件,百度网盘下载百度云盘地址 ,https://pan.baidu.com/s/1U5OnOf1fOpYhJ5evwbKo_w 提取码 lmp94.添加centos7.box文件 打开cmd 输入vagrant

随便推点

python问卷星微信登录_为什么我还可以继续使用python自动填问卷星?_李一雷的博客-程序员秘密

from selenium importwebdriverfrom selenium.webdriver.common.keys importKeysimporttimeimportrandomdefrun():#1 问卷填报日期driver.find_element_by_id('q1').click()driver.switch_to.frame('__calendarIframe')time...

docs邮箱服务器,连接到服务器时Microsoft Office Outlook - Skype for Business | Microsoft Docs..._孙叔敖夜的博客-程序员秘密

登录 Skype for Business Online 时Microsoft Office Outlook连接到 Skype for Business Online 时出现问题"2021/4/9适用于:Skype for Business Online本文内容问题在运行 Outlook 的计算机上使用 Lync 2010 或 Lync 2013 登录 Skype for Business Onl...

Linux命令与下载_ldybk的博客-程序员秘密

Linux命令切换目录 cd显示一个目录下的文件和文件夹:lllsls -lls -a文件目录操作创建文件 vim touch创建目录 mkdir删除文件或目录 rm -rf 文件/文件夹移动文件或文件夹 mv 源文件 目标文件复制文件或文件夹 cp查看端口号: netstat查看正在运行的进程:ps aux修改权限:chmod动态查看一个日志文件:t...

Windows10安装Annie_UNdead8023的博客-程序员秘密

Annie的安装:Github地址:https://github.com/iawia002/annie1.安装ScoopScoop 的安装配置安装 Scoop 很简单,不过你需要先确定一些基础环境是否符合安装要求:Windows 版本不低于 Windows 7 Windows 中的 PowerShell 版本不低于 PowerShell 3 你能正常、快速的访问 GitHub 并下载上面的资源 你的 Windows 用户名为英文(Windows 用户环境变量中路径...

实现线上高性能接口方案nginx负载tornado后端lua数据_weixin_33834679的博客-程序员秘密

最近实现了一个http的接口 ~ http的方式,访问结果为json nginx做负载,web分离,url转发 ~tornado做数据操作和异步调用lua的接口 ~memcached做session的共享 (为啥不用redis做session,一方面是为了不和redis有kv冲突,服务器的中断冗余,更主要的方面是用redis存储session我没有做出来,郁闷呀。。。。)redis做kv数据库和队...

推荐文章

热门文章

相关标签