java和JS 遍历一个Map对象的不同

server/2024/10/10 23:35:59/

使用For遍历

let paramMap = { key1: "value1", key2: "value2" };
let jsonObject = {};

Java

JSONObject jsonObject = new JSONObject();
for (Map.Entry<String, String> param : paramMap.entrySet()) {
    jsonObject.put(param.getKey(), param.getValue());
}

JS

for (let key in paramMap) {
    if (paramMap.hasOwnProperty(key)) {
        jsonObject[key] = paramMap[key];
    }
}

Q: 为什么JAVA要使用 paramMap.entrySet 返回一个Set结构才能被 For 遍历呢? 

A: 

• Map本质上是一种映射结构,不支持直接遍历,因为它不是序列化的数据结构(像List或Set那样有顺序的元素)。

• 通过 entrySet(),Map把所有的键值对转换成了一个Set集合,每个元素都是一个 Map.Entry(键值对),这样你就可以用for-each循环来遍历所有的键值对了。

Q:那为什么JS可以直接for in 遍历Map结果,而Java不行  ? -  -

A:简单来说是语言的差异。 

更深层是, Java要求数据结构要明确,实现哪些接口,能做哪些操作都要显式规定(这叫类型安全)。Map 这种映射结构并不是为了遍历而设计的,它只是提供键值对的映射功能(这叫分离职责)。

Java设计中将映射和集合分开,因此遍历Map中的键值对时,需要通过entrySet()方法来获取一个可以遍历的集合。而JavaScript中,对象本身就是可枚举的键值对,因此不需要转换即可遍历。

其实JS 也有跟JAVA很像的遍历对象的方法 

let map = new Map();
map.set('key1', 'value1');
map.set('key2', 'value2');

for (let [key, value] of map.entries()) {
    console.log(key + ": " + value);
}

// 

这里  entries 跟 java的 entrySet非常类似 - - 都是为了明确区分映射和可遍历集合。


http://www.ppmy.cn/server/129843.html

相关文章

WebGIS包括哪些技术栈?怎么学习?

WebGIS&#xff0c;其实是利用Web开发技术结合地理信息系统&#xff08;GIS&#xff09;的产物&#xff0c;它是一种通过Internet实现GIS交互操作和服务的最佳途径。 WebGIS通过图形化界面直观地呈现地理信息和特定数据&#xff0c;具有可扩展性和跨平台性。 它提供交互性&am…

猫头虎分享已解决Bug || AssertionError: Torch not compiled with CUDA enabled 解决方案

&#x1f42f; 猫头虎分享已解决Bug || AssertionError: Torch not compiled with CUDA enabled 解决方案 摘要 今天猫头虎收到粉丝提问&#xff1a;“猫哥&#xff0c;我在使用 PyTorch 进行 AI大模型训练 时&#xff0c;出现了 AssertionError: Torch not compiled with CUD…

高并发处理方案:构建可扩展的系统

在现代互联网应用中&#xff0c;高并发是一个常见的挑战。随着用户数量的增加和业务需求的复杂化&#xff0c;系统需要能够处理大量的并发请求。本文将探讨高并发处理的策略和方案&#xff0c;帮助开发者构建可扩展、稳定的系统。 1. 高并发的定义 高并发通常指的是系统在单位…

【科普】Yarn Berry与npm分别是什么?两者之间有什么异同?

Yarn Berry 和 npm 是两种广泛使用的 JavaScript 包管理工具&#xff0c;它们各自有不同的特点和功能。 Yarn Berry 概述&#xff1a;Yarn Berry 是 Yarn 的新版本&#xff08;Yarn 2.x 及更高版本&#xff09;&#xff0c;引入了许多新特性&#xff0c;如 Plug’n’Play、改…

protobuf之Message

简介 Message是protobuf的消息抽象类&#xff0c;是其它通过protoc生成的自定义消息的基类 结构 #mermaid-svg-u5iAZNpfIH5hQrlP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-u5iAZNpfIH5hQrlP .error-icon{fil…

【C语言】编译和链接

目录 一、翻译环境和运行环境 二、翻译环境 &#xff08;1&#xff09;预处理&#xff08;预编译&#xff09; &#xff08;2&#xff09;编译 ① 词法分析 ② 语法分析 ③ 语义分析 &#xff08;3&#xff09;汇编 &#xff08;4&#xff09;链接 三、运行环境 四、…

Comfyui 学习笔记5

1.图像处理小工具&#xff0c;沿某个轴反转Image Flip 2. reactor换脸 3. 通过某人的多张照片进行训练 训练的模型会保存在 models/reactor/face/下面&#xff0c;使用时直接load就好 4. 为一个mask 更加模糊 羽化 5. 指定位置替换&#xff0c;个人感觉这种方式进行换脸的融…

类加载器解析、栈动态链接、符号引用和直接引用

文章目录 类加载器解析、栈动态链接、符号引用和直接引用符号引用和直接引用类加载器解析解析的时机解析的细节与优化 类加载器解析、栈动态链接、符号引用和直接引用 符号引用和直接引用 符号引用&#xff08;Symbolic Reference&#xff09;&#xff1a; 符号引用是一种相对…