set集合和map集合

本文介绍了JavaScript中的Set和Map数据结构,展示了如何创建、添加元素、遍历以及转换为数组的方法。Set用于存储不重复的值,Map则提供了键值对的存储,通过实例演示了如何在Map中存取数据并遍历。此外,还提到了从数组转换为Set,以及将Set转换回数组的实用技巧。

set集合

// 创建set对象
let imgs = new Set();
//添加元素
imgs.add(100);
imgs.add(100);
imgs.add("hello");
imgs.add("hello");
imgs.add("true");
imgs.add(new String("world"));
imgs.add(new String("world"));
// 如果添加相等的元素,则只会保存第一个元素:
console.log(imgs); // {100, 'hello', 'true', {'world'}, {'world'}}
  • for…of遍历集合
// keys()	返回 Set 对象中值的数组。
for(let item of imgs.keys()){
    console.log(item);
}

在这里插入图片描述

// values()	与 keys() 相同
for(let item of imgs.values()){
     console.log(item);
 }

在这里插入图片描述

// entries() 迭代对象中数组的索引值作为 key, 数组元素作为 value
for(let item of imgs.entries()){
    console.log(item);
}

在这里插入图片描述

//数组变集合
var set = new Set([10,20,30,30,50,10,60,50]);
console.log(set); // {10, 20, 30, 50, 60}

//集合变数组 将数据解构展开成数组
var arr = [...set];
console.log(arr); // [10, 20, 30, 50, 60]

map集合

// 创建map对象
let map = new Map();

//添加数据
map.set("张三","打鱼的");
map.set("李四","种地的");
map.set("王五","挖煤的");

console.log(map);

在这里插入图片描述

// 取值
alert(map.get("王五"));

在这里插入图片描述

/* 
 	map遍历     通过for of
*/
for(let [key,value] of map){
    console.log(key,value);
}

在这里插入图片描述

Java 中的 Set 集合 Map 集合存在多方面差异。 ### 基本概念 - **Set 集合**:是一个无序集合,元素不可重复,重复元素会被覆盖掉,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。元素在 Set 中的位置由该元素的 HashCode 决定,其位置是固定的,加入 Set 的 Object 必须定义 equals() 方法。Set 只能用迭代器遍历,因为它是无序的 [^2]。 - **Map 集合**:集合中存储的是键值对,键不能重复,值可以重复。根据键可以得到值,对 map 集合遍历时先得到键的 set 集合,对该 set 集合进行遍历,从而得到相应的值 [^2]。 ### 接口继承关系 Set 接口类继承 Collection 接口,而 Map 则不继承 Collection 接口 [^2]。 ### 元素特性 - **Set 集合**:只存储单个元素,关注元素本身的唯一性 [^2]。 - **Map 集合**:存储键值对,关注键的唯一性以及键值的映射关系 [^2]。 ### 常用实现类及特点 - **Set 集合**:常用具体实现有 HashSet TreeSet 类。HashSet 能快速定位一个元素,但放入其中的对象需要实现 hashCode() 方法;TreeSet 则将放入其中的元素按序存放,要求放入其中的对象是可排序的,需要实现 Comparable 接口或使用 Comparator 接口 [^4]。 - **Map 集合**:常见实现类如 HashMap、TreeMap 等。HashMap 基于哈希表实现,允许使用 null 键 null 值,不保证元素顺序;TreeMap 基于红黑树实现,会根据键的自然顺序或指定的比较器对键进行排序 [^2]。 ### 操作效率 - **Set 集合**:检索元素效率较低,删除插入效率高,因为删除插入不会引起元素的位置变化 [^2]。 - **Map 集合**:根据键查找值的效率较高,插入删除操作在一般情况下也有较好的性能,但在需要维护键的顺序时(如 TreeMap),可能会有额外的开销 [^2]。 ### 遍历方式 - **Set 集合**:只能使用迭代器进行遍历 [^2]。 - **Map 集合**:先得到键的 set 集合,对该 set 集合进行遍历,进而得到相应的值 [^2]。示例代码如下: ```java import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapTraversal { 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> set = map.keySet(); for (String key : set) { System.out.println(key + "\t" + map.get(key)); } } } ``` ### 集合视角 Map 虽然不是真正意义上的集合,但提供了三种“集合视角”,可将其内容看作 key 的集合、value 的集合以及 key - value 映射的集合,方便像操作集合一样操作它 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方求败、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值