map和key

本文介绍了JavaScript中的Map对象,与普通对象在键值对存储、创建方式、顺序、调用和设置属性等方面的区别,以及Map的特性和常用方法。
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		// let arrs = [["age",18],["sex","男"]]
		// let mapObj = new Map(arrs);
		// let sum = "aa";
		// mapObj.set("name","张三");
		// mapObj.set(sum,99);
		// console.log(mapObj.get("name"));
		// console.log(mapObj.get("aa"));
		// console.log(mapObj.get(sum));
		// mapObj.set("{}","111");
		// mapObj.set({},"222");
		// mapObj.set([1,2,3],"222");
		// mapObj.set(function(){},"333");
		// mapObj.set(NaN,"333");
		// mapObj.set(null,"333");
		// mapObj.set(undefined,"333");
		// console.log(mapObj);
		// console.log(mapObj.entries());
		// for(let [a,b] of mapObj.entries()){
		// 	console.log(a);
		// 	console.log(b);
		// }
		// console.log(mapObj.keys());
		// for(let a of mapObj.keys()){
		// 	console.log(a);
		// }
		// console.log(mapObj.values());
		// for(let a of mapObj.values()){
		// 	console.log(a);
		// }
		// for(let [a,b] of mapObj){
		// 	console.log(a);
		// 	console.log(b);
		// }
		// let arr = [[11,22],[33,44]]
		// for(let [a,b] of arr){
		// 	console.log(a);
		// 	console.log(b);
		// }
		// mapObj.forEach(function(item,index){
		// 	console.log(item);
		// 	console.log(index);
		// })
		var kvArray = [["key1", "value1"], ["key2", "value2"]];
		var kvArray1 = [["key1", "value3"], ["key4", "value4"]];
		var myMap = new Map(kvArray);
		var myMap1 = new Map(kvArray1);
		console.log(...myMap);
		let myMap2 = new Map([...myMap,...myMap1])
		console.log(myMap);
		console.log(myMap1);
		console.log(myMap2);
		// Map 构造函数可以将一个 二维 键值对数组转换成一个 Map 对象
		// var myMap = new Map(kvArray);
		// var myMap1 = new Map(myMap);
		// console.log(myMap);
		// console.log(myMap1);
		// console.log(myMap==myMap1);
		// 使用 Array.from 函数可以将一个 Map 对象转换成一个二维键值对数组
		// var outArray = Array.from(myMap);
		// console.log(outArray);
		
		// Map的特性
		// Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
		// Map 对象记得键的原始插入顺序。
		// Map 对象具有表示映射大小的属性。
		
		// Map 对象的几个常用方法和属性
		// new Map() 创建新的 Map 对象。
		// set() 为 Map 对象中的键设置值。
		// get() 获取 Map 对象中键的值。
		// entries() 返回 Map 对象中键/值对的数组。
		// keys() 返回 Map 对象中键的数组。
		// values() 返回 Map 对象中值的数组。
		
		// 共同点
		// 二者都是以key-value的形式对数据进行存储;
		
		// 不同点
		// key的数据类型范围不同
		// obj可以作为key的仅有number、string、symbol。
		// map均可以。
		
		// key的顺序不同。
		// obj通过obj.keys()打印出来的属性顺序是 number–字符串
		// map的key顺序是声明顺序。
		
		// 创建方式不同。
		// obj有三种创建方式 字面量{}、new Object() 、构造函数。
		// map仅支持new Map()
		
		// key的调用不同。
		// map只能用原生的get方法调用。
		
		// 设置属性的方式不同
		// map只能使用set(key,val)方法设置属性。
		
		// Size属性
		// map有size属性,对象没有。Map.size 返回 Map 中元素的数量,而 Object 的键值对个数只能手动计算
	</script>
</html>

在 Java 中,从 `Map` 里取出 `key` `value` 有多种方法,以下是一些常见的方式: ### 使用 `entrySet()` 遍历 `entrySet()` 方法会返回一个包含 `Map` 中所有键值对的 `Set` 集合,通过遍历这个集合可以同时获取 `key` `value`。 ```java import java.util.HashMap; import java.util.Map; public class MapEntrySetExample { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); for (Map.Entry<String, Integer> entry : map.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println("Key: " + key + ", Value: " + value); } } } ``` ### 使用 `keySet()` 遍历 `keySet()` 方法会返回一个包含 `Map` 中所有键的 `Set` 集合,通过遍历这个集合,再使用 `get()` 方法获取对应的 `value`。 ```java import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapKeySetExample { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); Set<String> keys = map.keySet(); for (String key : keys) { Integer value = map.get(key); System.out.println("Key: " + key + ", Value: " + value); } } } ``` ### 使用 Java 8 的 `forEach()` 方法 `forEach()` 方法是 Java 8 引入的一个便捷方法,它接受一个 `BiConsumer` 函数式接口作为参数,可以直接遍历 `Map` 中的键值对。 ```java import java.util.HashMap; import java.util.Map; public class MapForEachExample { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); map.forEach((key, value) -> { System.out.println("Key: " + key + ", Value: " + value); }); } } ``` ### 使用迭代器 可以使用 `entrySet()` 的迭代器来遍历 `Map` 中的键值对。 ```java import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class MapIteratorExample { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, Integer> entry = iterator.next(); String key = entry.getKey(); Integer value = entry.getValue(); System.out.println("Key: " + key + ", Value: " + value); } } } ``` ### 使用 Stream API Java 8 引入的 Stream API 也可以用于遍历 `Map` 中的键值对。 ```java import java.util.HashMap; import java.util.Map; public class MapStreamExample { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); map.entrySet().stream() .forEach(entry -> { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println("Key: " + key + ", Value: " + value); }); } } ``` ### 总结 不同的方法适用于不同的场景,`entrySet()` 遍历是最常用的方法,它效率较高且可以同时获取 `key` `value`;`keySet()` 遍历适用于只需要 `key` 或者根据 `key` 获取 `value` 的场景;`forEach()` 方法 Stream API 则提供了更简洁的语法,适合 Java 8 及以上版本使用;迭代器则适用于需要手动控制遍历过程的场景。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值