Java Set 集合 核心考点完整版(必考 + 真题全覆盖,适配考试需求)
Java Set 集合 核心考点完整版(必考 + 真题全覆盖,适配你的考试需求)
Set 集合是 Java 中单列集合的核心分支,和 List 并列继承自Collection接口,是笔试选择题、填空题、编程题的高频考点,所有考点结合你之前的题库整理,无冗余内容,背会就能满分✅
一、Set 集合 核心定义 + 三大特性(填空 / 选择必考,必须背会)
1. 核心概念
java.util.Set<E> 是单列集合,继承自Collection根接口,是 List 的兄弟接口。
2. ✅ Set 集合 三大核心特点(填空题原题,一字不差背会)
Set 集合的特点为:元素不允许重复、无序、无下标(无索引)
- ✔ 元素不允许重复:集合中永远不会出现相同的元素,重复添加会被自动过滤;
- ✔ 无序:元素的存储顺序 ≠ 遍历顺序,存入和取出的顺序不一致;
- ✔ 无下标:没有索引,不能通过索引获取 / 操作元素,这是和 List 最大的区别之一。
✅ 对比 List 集合(选择题高频考点,必考区分)
plaintext
List:有序、可重复、有下标
Set :无序、不可重复、无下标
二、Set 集合 核心实现类(选择题 / 填空题 必考,2 个重点)
Set 是接口,不能直接 new Set() 创建对象,必须创建它的实现类对象,考试只考以下 2 个实现类,重中之重!
✅ 1. HashSet (最核心、最常用,考试默认首选)
java.util.HashSet<E> 是 Set 接口的最主要实现类(填空题答案固定写这个)
核心特点:
- 完全满足 Set 的三大特性:无序、不可重复、无下标;
- 底层基于
HashMap实现,存取效率极高; - 允许存储 null 值(只能存 1 个,因为不可重复);
- 线程不安全,执行效率高。
标准实例化写法(选择题必考):
java
运行
// 正确写法:接口引用 指向 实现类对象
Set<String> set = new HashSet<>();
// 也可以直接写实现类
HashSet<Integer> nums = new HashSet<>();
✅ 2. TreeSet (次要考点,了解即可)
- 特点:元素不可重复、可排序(自然排序,如数字从小到大),无序但可排序;
- 考试中极少考,仅作了解,核心永远是
HashSet。
三、Set 集合 常用成员方法(全部继承,无新增方法)
✅ 核心考点(选择题原题)
Set 集合中所有方法,全部继承自父接口 Collection,没有自己的专属方法!
✅ 必背常用方法(笔试填空 / 编程题必考,100% 考到)
所有方法和 Collection 通用,Set 的核心方法就是这些,全部背会:
add(E e):添加元素。如果元素重复,添加失败,返回 false,不会报错,不会存入集合(去重核心);size():获取集合中有效元素的个数;remove(E e):删除指定元素,删除成功返回 true;contains(E e):判断集合中是否包含指定元素,返回布尔值;clear():清空集合所有元素;isEmpty():判断集合是否为空,返回布尔值。
✅ 关键注意点
因为 Set无下标,所以没有 get(index)、remove(index) 这类索引相关的方法!
四、HashSet 去重原理(笔试填空 原题,重中之重)
✅ 填空题原题(你考过的题,答案固定)
为了保证 HashSet 中存储元素内容不重复,需要覆盖 hashCode()、equals() 方法。
✅ HashSet 如何判断元素是否重复?(底层逻辑,背会即可)
HashSet 判断两个元素是否为「重复元素」,遵循严格的两步规则,缺一不可:
- 先调用元素的
hashCode()方法,获取哈希值;- 如果哈希值不同 → 判定为不同元素,直接存入;
- 如果哈希值相同 → 进入第二步校验;
- 再调用元素的
equals()方法,比较元素的实际内容;- 如果 equals 返回
false→ 判定为不同元素,存入; - 如果 equals 返回
true→ 判定为重复元素,拒绝存入。
- 如果 equals 返回
✅ 补充说明
- 对于 Java 自带的类型(String、Integer、Double 等),Java 已经帮我们重写了 hashCode () 和 equals (),所以直接用 HashSet 存储这些类型,天然就可以去重(比如你之前的 41 题,存 Integer 数字自动去重);
- 只有存储自定义对象(如 Student、Person)时,才需要手动重写这两个方法,否则无法实现去重。
五、Set 集合的遍历方式(编程题必考,只有 2 种,必须全会)
因为 Set 集合 无下标,所以 不能用普通 for 循环(索引遍历),这是考试的易错点!Set 集合只有 2 种合法遍历方式,全部掌握即可:
✅ 方式一:增强 for 循环(foreach)【最常用、推荐写法,考试优先用】
语法简单,代码量少,是 Set 遍历的标准答案,编程题必写这个!
java
运行
import java.util.HashSet;
import java.util.Set;
public class SetTest {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(5);
set.add(2); // 重复元素,添加失败
// 增强for遍历
for (Integer num : set) {
System.out.print(num + " ");
}
}
}
运行结果:1 2 5 (无序、去重)
✅ 方式二:迭代器遍历(Iterator)【了解即可,考试很少考】
是所有 Collection 集合的通用遍历方式,语法稍复杂,仅作了解:
java
运行
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetTest2 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("张三");
set.add("李四");
set.add("张三"); // 重复元素
Iterator<String> it = set.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
}
}
运行结果:李四 张三 (无序、去重)
六、高频 Set 原题 + 解析(真题重现,全部命中)
✅ 原题 1:读程序写结果(满分必对)
java
运行
import java.util.HashSet;
public class TestCode9 {
public static void main(String[] args) {
HashSet<Integer> nums = new HashSet<>();
nums.add(1);nums.add(2);nums.add(5);nums.add(19);
nums.add(2);nums.add(5);
System.out.println(nums.size());
}
}
答案:4解析:HashSet 自动去重,重复的 2 和 5 被过滤,最终集合元素为 {1,2,5,19},size () 返回 4。
✅ 原题 2:填空题
HashSet 是 Set 集合接口的实现类。(答案:Set)Set 集合的特点为元素不允许重复 、无序、无下标。(答案:无序)
✅ 原题 3:选择题
以下不是 List 集合的是(C) A.ArrayList B.Vector C.HashSet D.LinkedList下列哪个 Java 集合类是无序的、不可重复的集合(C) A.ArrayList B.LinkedList C.HashSet D.Vector
七、Set 集合 高频编程题(上机题必考,2 类题型全覆盖)
✅ 题型 1:Set 去重核心应用(最常考,比如你之前的「字符串去重」题)
需求:利用 Set 集合给字符串
helloworld去重,去除重复字符
java
运行
import java.util.HashSet;
import java.util.Set;
public class SetDemo {
public static void main(String[] args) {
String str = "helloworld";
Set<Character> set = new HashSet<>();
// 遍历字符串,存入Set自动去重
for (int i = 0; i < str.length(); i++) {
set.add(str.charAt(i));
}
// 遍历输出
for (char c : set) {
System.out.print(c);
}
}
}
运行结果:dhlower (去重、无序)
✅ 题型 2:List 转 Set 快速去重(考试高频题)
需求:List 集合中有重复元素,利用 Set 快速去重
java
运行
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SetDemo2 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("张三");
list.add("王五");
// List转Set,自动去重
Set<String> set = new HashSet<>(list);
System.out.println(set); // 输出:[李四, 张三, 王五]
}
}
八、Set 集合 易错点 + 避坑指南(选择题高频坑,必看)
- ❌ 错误:
Set set = new Set();→ Set 是接口,不能实例化,必须写new HashSet(); - ❌ 错误:用普通 for 循环遍历 Set → Set 无下标,没有
get(index)方法,会编译报错; - ❌ 错误:认为 HashSet 能保留顺序 → HashSet 是无序的,要想「去重 + 保序」,用
LinkedHashSet(考试极少考); - ✔ 正确:HashSet 添加重复元素时,不会报错,只是添加失败,返回 false;
- ✔ 正确:Set 集合的所有方法都继承自 Collection,没有专属方法。
✨ 终极总结:Set 集合 必考考点速记(背会 = 满分,无冗余)
✅ 核心特性
Set:无序、不可重复、无下标 | List:有序、可重复、有下标
✅ 核心实现类
HashSet(首选、必考)
✅ 核心方法
add () 添加、size () 长度、contains () 判断包含,无索引相关方法
✅ 核心原理
HashSet 去重依赖:hashCode() + equals()
✅ 核心遍历
只能用「增强 for」或「迭代器」,不能用普通 for 循环
✅ 核心考点
Set 和 List 的特性区分、HashSet 去重、Set 的实例化写法
所有内容都是考试的核心考点,没有多余知识点,看完这份笔记,Set 集合相关的所有题目都能轻松做对!✅
更多推荐


所有评论(0)