java基础——java集合set详解

分类: 365bet软件下 时间: 2025-11-30 21:46:04 作者: admin 观测: 6475
java基础——java集合set详解

目录

一、引言

二、Set接口概述

1.常用方法

2.实现Set的主要类

2.1.HashSet

2.2.LinkedHashSet

2.3.TreeSet

3.实现类对比

三、Set的遍历与去重

1.Set的三种主要遍历方式

1.1.增强型for循环

1.2.使用 Iterator

1.3.JDK8的forEach

2.Set去重方法

四、结语

一、引言

Set是Java集合框架中用于存储唯一元素的核心接口,广泛应用于数据去重、成员检查、数学集合运算等场景。与List和Map不同,Set通过元素的唯一性保证数据不重复,且不维护元素的插入顺序(除非使用特定实现类)。本文将深入剖析HashSet、LinkedHashSet、TreeSet,结合代码示例讲解核心方法、遍历技巧及使用场景,助你全面掌握Set的精髓!

以下是一个展示Java中常用Set集合的思维导图:

二、Set接口概述

Set接口作为Java集合框架的核心组成部分,与List形成鲜明对比,其核心特征在于元素唯一性。与Map接口不同,Set仅存储单一元素而非键值对,但底层实现与Map存在技术同源性。

1.常用方法

add(E e):添加一个元素,若已存在则添加失败 remove(Object o):移除指定元素 contains(Object o):判断是否包含某个元素 size():返回集合大小 isEmpty():判断集合是否为空 clear():清空集合

Set set = new HashSet<>();

set.add("apple");

set.add("banana");

set.add("apple"); // 重复元素不会被添加

System.out.println(set); // 输出:[banana, apple]

System.out.println(set.contains("apple")); // true

set.remove("banana");

System.out.println(set.size()); // 1

2.实现Set的主要类

2.1.HashSet

HashSet是一个底层基于HashMap实现的Set集合,内部维护一个 HashMap,添加的元素作为 HashMap 的 key,value 是一个空对象(PRESENT)。

特点: 插入和查询效率高。 非线程安全。 自动去重。 使用场景:

存储不需要顺序的唯一元素。

快速查找、插入、删除操作。

示例代码

Set set = new HashSet<>();

set.add("c");

set.add("a");

set.add("b");

System.out.println(set); // 输出顺序不确定,如 [a, b, c] 或 [c, a, b]

2.2.LinkedHashSet

LinkedHashSet是一个继承HashSet,底层基于LinkedHashMap实现的Set集合,利用 LinkedHashMap 的双向链表结构保持插入或访问顺序。 特点 保留插入顺序,同时支持高效的增删查。 自动去重。 严格维护FIFO顺序。 使用场景 适用于需要保持插入顺序或访问顺序,同时需要去重功能。

示例代码

Set set = new LinkedHashSet<>();

set.add("c");

set.add("a");

set.add("b");

System.out.println(set); // 输出顺序固定:[c, a, b]

2.3.TreeSet

TreeSet是一个底层基于TreeMap实现的有序集合,存储的元素必须实现 Comparable 接口,或者构造时传入 Comparator(即元素必须可排序)

特点:

不允许 null 元素,非线程安全。

自动排序。

插入/删除效率较低。

有丰富的导航和范围查询方法。

使用场景:

需要按键排序存储。

支持范围查询(如获取大于某值的所有元素)。

示例代码:

TreeSet set = new TreeSet<>();

set.add(10);

set.add(20);

set.add(30);

set.add(40);

// 获取 [20, 40) 区间内的子集

System.out.println(set.subSet(20, 40)); // 输出:[20, 30]

// 获取小于 30 的元素

System.out.println(set.headSet(30)); // 输出:[10, 20]

// 获取 >= 20 的元素

System.out.println(set.tailSet(20)); // 输出:[20, 30, 40]

//返回严格大于给定元素的最小元素

System.out.println(set.higher(25)); // 输出:30

System.out.println(set.higher(40)); // 输出:null(没有更大的)

//返回小于等于给定元素的最大元素

System.out.println(set.floor(25)); // 输出:20

System.out.println(set.floor(30)); // 输出:30

//返回大于等于给定元素的最小元素

System.out.println(set.ceiling(25)); // 输出:30

System.out.println(set.ceiling(30)); // 输出:30

TreeSet set = new TreeSet<>();

set.add("apple");

set.add("banana");

set.add("cherry");

//返回集合中最小的元素(第一个)

System.out.println(set.first()); // 输出:apple

//返回集合中最大的元素(最后一个)

System.out.println(set.last()); // 输出:cherry

3.实现类对比

三、Set的遍历与去重

1.Set的三种主要遍历方式

1.1.增强型for循环

Set set = new HashSet<>();

set.add("apple");

set.add("banana");

for (String s : set) {

System.out.println(s);

}

1.2.使用 Iterator

Iterator it = set.iterator();

while (it.hasNext()) {

System.out.println(it.next());

}

1.3.JDK8的forEach

Set set = new HashSet<>();

set.add("apple");

set.add("banana");

set.forEach(System.out::println);

2.Set去重方法

Set集合存储元素是唯一的,自动去重。

四、结语

Set 是 Java 中用于处理唯一元素集合的核心工具之一。它不仅简化了去重逻辑,还能根据不同的实现类满足顺序、排序等多样化需求。 通过本文的学习,你应该已经掌握了: Set 接口的基本方法和特点 HashSet、LinkedHashSet、TreeSet 的区别与使用场景 如何选择合适的实现类以应对不同业务需求 希望这篇文章能帮助你更好地理解和应用 Java 中的 Set 集合,提升编程能力!如果你有任何疑问,欢迎随时交流 😊

← 用云之家直播会议做到跨地域沟通 3dmax 移动物体 →

相关时空节点

2025款哈弗H9全面评测:越野性能与豪华配置的完美结合

2025款哈弗H9全面评测:越野性能与豪华配置的完美结合

11-04 💫 27
中國公主列表

中國公主列表

07-30 💫 749
内衣品牌特卖每日10点上新

内衣品牌特卖每日10点上新

09-17 💫 644