最近在写一个web页的业务逻辑时,需要对数组去重。在准备写的那一刻,我犹豫了一下,还要在循例里判断去重吗?好麻烦呀!有没有更简便的方法,最好一行代码搞定!搜索一下,方法还是有的。
在 ECMAScript 6 中新增的数据结构 Set,用于存储唯一值的集合。JS 中也有 Set 了,一起看看它和 Java 中的 Set 有何不同。ECMAScript 是嵌入在Web浏览器中的语言。
JS 中的 Set
-
初始化 Set
const mySet = new Set();
运行结果图:
-
添加元素到 Set
mySet.add("apple");
-
从 Set 中删除元素
mySet.delete("banana");
-
检查 Set 中是否包含特定元素
console.log(mySet.has("apple")); // false
-
获取 Set 的大小(即元素数量)
console.log(mySet.size); // 2
-
将 Set 转换为数组:
const myArray = [...mySet];
-
使用迭代器遍历 Set
mySet.forEach((value) => {console.log(value);});
-
返回一个集合迭代器:
console.log(mySet);
运行结果:
官网:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
Java 中的 Set
在 Java 中,Set 是 java.util 包中的一个泛型接口,继承自 Collection 接口,用于表示一组不包含重复元素的对象。
-
创建一个空的 Set
Set<String> mySet = new HashSet<>();
-
添加元素到 Set
mySet.add("apple");
-
从 Set 中删除元素
mySet.remove("banana");
-
检查 Set 中是否包含特定元素
System.out.println(mySet.contains("apple")); // true
-
获取 Set 的大小(即元素数量)
System.out.println(mySet.size()); // 2
-
使用迭代器或 forEach 循环遍历 Set
// 使用迭代器
-
Set 转换为数组
// 无参数为Object类型的数组
-
两个Set 集合对比,只保持第一个集合中有的数据
mySet.stream().forEach(item->{
运行结果:
官网:https://docs.oracle.com/javase/8/docs/api/java/util/Set.html
JS 中的 Set 是一个对象,而 Java 中的 Set 是一个接口,这是它们的不同。它俩虽有不同,但在使用的时候,大部分方法名几乎都是一样的,这对于 Java Web 开发者非常友好。