为什么阿里不推荐使用 keySet() 遍历HashMap?

news2024/9/24 1:26:08

引言

HashMap相信所有学Java的都一定不会感到陌生,作为一个非常重用且非常实用的Java提供的容器,它在我们的代码里面随处可见。因此遍历操作也是我们经常会使用到的。HashMap的遍历方式现如今有非常多种:

  1. 使用迭代器(Iterator)。

  2. 使用 keySet() 获取键的集合,然后通过增强的 for 循环遍历键。

  3. 使用 entrySet() 获取键值对的集合,然后通过增强的 for 循环遍历键值对。

  4. 使用 Java 8+ 的 Lambda 表达式和流。

以上遍历方式的孰优孰劣,在《阿里巴巴开发手册》中写道:

图片

这里推荐使用的是entrySet进行遍历,在Java8中推荐使用Map.forEach()。给出的理由是遍历次数上的不同。

  1. keySet遍历,需要经过两次遍历。

  2. entrySet遍历,只需要一次遍历。

其中keySet遍历了两次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。

其中后面一段话很好理解,但是前面这句话却有点绕,为什么转换成了Iterator遍历了一次?

我查阅了各个平台对HashMap的遍历,其中都没有或者原封不动的照搬上句话。(当然也可能是我没有查阅到靠谱的文章,欢迎指正)

keySet如何遍历了两次

我们首先写一段代码,使用keySet遍历Map。

public class Test {


    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("k1", "v1");
        map.put("k2", "v2");
        map.put("k3", "v3");
        for (String key : map.keySet()) {
            String value = map.get(key);
            System.out.println(key + ":" + value);
        }
    }

}

运行结果显而易见的是

k1:v1
k2:v2
k3:v3

两次遍历,第一次遍历所描述的是转为Iterator对象我们好像没有从代码中看见,我们看到的后面所描述的遍历,也

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1488192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数仓】Hadoop软件安装及使用(集群配置)

一、环境准备 1、准备3台虚拟机 Hadoop131&#xff1a;192.168.56.131Hadoop132&#xff1a;192.168.56.132Hadoop133&#xff1a;192.168.56.133 本例系统版本 CentOS-7.8&#xff0c;已安装jdk1.8 2、hosts配置&#xff0c;关闭防火墙 vi /etc/hosts添加如下内容&#x…

双运算放大器,具有较宽的工作电压范围,转换速率高。采用DIP8、SOP8两种封装形式——D4510

D4510是一块双运算放大器&#xff0c;具有较宽的工作电压范围&#xff0c;转换速率高&#xff0c;相位补偿等特性。电路能在低电源电压下:工作,电源电压范围:双电源为1V-3.5V和单电源电压为2V~7V。 主要特点&#xff1a; ● 低电压工作 ● 转换速率高 ● 动态输出范围宽 ● 封…

2093409-57-3,DBCO PEG3 NH2,可以在无铜条件下与多种含有叠氮基的分子进行反应

2093409-57-3&#xff0c;二苯并环辛炔-三聚乙二醇-胺&#xff0c;DBCO-PEG3-amine&#xff0c;DBCO PEG3 NH2&#xff0c;可以在无铜条件下与多种含有叠氮基的分子进行反应&#xff0c;能够与其他分子进行偶联 您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;2093…

数据库安全的重要性

数据库作为信息系统的核心&#xff0c;不仅承载着海量的关键数据&#xff0c;还负责向各类用户提供高效、可靠的信息服务。在网络技术高度发展的今天&#xff0c;数据库的安全性显得尤为关键。为了防范不法分子的攻击&#xff0c;维护数据完整性和可靠性&#xff0c;数据库安全…

老年人居家安全问题,全视通社区居家养老解决方案来赋能

近年来&#xff0c;老年人居家环境问题逐渐受到社会的关注。从新闻报道得知&#xff0c;传统居家环境对老年人存在诸多挑战&#xff0c;比如在入户空间、起居&#xff08;室&#xff09;厅、卧室、卫生间、厨房等区域。这些挑战不仅影响老年人的生活质量&#xff0c;还可能导致…

“找不到msvcr90.dll无法启动软件如何解决

msvcr90.dll 是一个属于 Microsoft Visual C 2008 Redistributable Package 的动态链接库&#xff08;DLL&#xff09;文件。在Windows操作系统中&#xff0c;许多应用程序特别是那些使用Visual Studio 2008编译器开发的程序&#xff0c;在运行时可能需要调用这个库中的函数和资…

基于小红书评论的文本词语频数挖掘和词云图

import pandas as pd df pd.read_csv(小红书评论.csv) # 读取小红书评论数据 text .join(df[内容].astype(str)).strip() # 将内容列所有数据合成字符串 print(text) 使用jieba库&#xff0c;对文本数据进行分词&#xff0c;并统计出现频数 import jieba from collectio…

Maven实战之聚合

聚合&#xff1a;一条命令构建多个模块。 父子关系&#xff0c;account-aggregator与account-email、account-persist为父子关系 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schem…

6、JavaWeb-Mybatis

P116 Mybatis-入门 Mybatis是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发。 持久层就是三层控制中的Dao层&#xff0c;数据访问层/持久层&#xff0c; P117 Mybatis-入门-快速入门程序 步骤&#xff1a; 创建springboot工程&#xff0c;数据表和实体类 引入mybat…

盘点Unity几款编辑器扩展工具

unity编辑器一个不容忽视的强大之处就是非常易于自定义扩展工具&#xff0c;来满足各种各样的美术、策划及程序上的需求。今天为大家介绍Asset Store资源商店中几款实用的编辑器扩展工具&#xff0c;帮助大家直接在Unity编辑器中完成3D建模与调整工作&#xff0c;免去与其它软件…

【网站项目】139选课排课系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

栈与队列力扣经典例题20. 有效的括号1047. 删除字符串中的所有相邻重复项150. 逆波兰表达式求值

对于栈与队列&#xff0c;我们首先要搞清楚&#xff0c;栈是先入后出&#xff0c;而队列是先入先出&#xff0c;利用这个特性&#xff0c;我们来判断题目用什么STL容器&#xff0c;便于我们去解决问题 20. 有效的括号 这道题&#xff0c;首先我们要知道哪些情况&#xff0c;是会…

Kubernetes的Sevice管理

服务原理: 所有服务都是根据这个服务衍生或者变化出来,根服务---- 服务感知后端靠标签 slelector 标签选择器 kubectl label pods web1 appweb kubectl cluter-info dump | grep -i service-cluster-ip-range 服务ip取值范围 Service 管理: 创建服务: --- kind: Serv…

C++ //练习 10.2 重做上一题,但读取string序列存入list中。

C Primer&#xff08;第5版&#xff09; 练习 10.2 练习 10.2 重做上一题&#xff0c;但读取string序列存入list中。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /******************************************************…

Vue3:用vite创建Vue3项目

一、简介 vite是新一代前端构建工具&#xff0c;官网地址&#xff1a;https://vitejs.cn vite的优势如下&#xff1a; 轻量快速的热重载&#xff08;HMR&#xff09;&#xff0c;能实现极速的服务启动。对 TypeScript、JSX、CSS 等支持开箱即用。真正的按需编译&#xff0c;不…

Linux配置网卡功能

提示:工具下载链接在文章最后 目录 一.network功能介绍二.配置network功能2.1 network_ip配置检查 2.2 network_br配置2.2.1 配置的网桥原先不存在检查2.2.2 配置的网桥已存在-修改网桥IP检查2.2.3 配置的网桥已存在-只添加网卡到网桥里检查 2.3 network_bond配置检查 2.4 netw…

王者荣耀整蛊搭建直播新玩法/obs贴纸配置教程

最近很火的王者荣耀整蛊直播&#xff0c;相信很多玩王者的玩家也想开一个直播&#xff0c;但是看到这种直播娱乐效果很有意思也想搭建一个&#xff0c;这里梦哥给大家出了一期搭建的教程&#xff01; 进阶版视频教程&#xff1a; 这期的教程是进阶版新玩法升级&#xff0c;具体…

动态gif怎么在线制作?轻松实现gif在线制作的小窍门

日常我们在使用聊天软件聊天时会使用一些好玩有趣的gif表情包&#xff0c;其实很多gif表情包都是从视频中的提取出来的画面。那么&#xff0c;如何将视频转换成gif动画&#xff1f;通过使用在线动画制作&#xff08;https://www.gif.cn/&#xff09;工具就能轻松实现这一操作&a…

大模型(LLM)的训练语料信息汇总

大规模语料是模型训练的基础 大模型的训练&#xff0c;大规模的语料是很重要的 大型语言模型在许多自然语言处理任务上取得了显著进展&#xff0c;研究人员正在转向越来越大的文本语料库进行训练 大多数基于Transformer的大型语言模型 (LLM) 都依赖于英文维基百科和Common C…

深入探讨 AutoGPT:彻底改变游戏的自主 AI

原文地址&#xff1a;Deep Dive into AutoGPT: The Autonomous AI Revolutionizing the Game 2023 年 4 月 24 日 AutoGPT 是一个功能强大的工具&#xff0c;它通过 API 使用 GPT-4 和 GPT-3.5&#xff0c;通过将项目分解为子任务并在自动循环中使用互联网和其他工具来创建完…