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 接口的最主要实现类(填空题答案固定写这个)

核心特点:
  1. 完全满足 Set 的三大特性:无序、不可重复、无下标
  2. 底层基于HashMap实现,存取效率极高;
  3. 允许存储 null 值(只能存 1 个,因为不可重复);
  4. 线程不安全,执行效率高。
标准实例化写法(选择题必考):

java

运行

// 正确写法:接口引用 指向 实现类对象
Set<String> set = new HashSet<>();
// 也可以直接写实现类
HashSet<Integer> nums = new HashSet<>();

✅ 2. TreeSet (次要考点,了解即可)

  1. 特点:元素不可重复、可排序(自然排序,如数字从小到大),无序但可排序;
  2. 考试中极少考,仅作了解,核心永远是HashSet

三、Set 集合 常用成员方法(全部继承,无新增方法)

✅ 核心考点(选择题原题)

Set 集合中所有方法,全部继承自父接口 Collection,没有自己的专属方法!

✅ 必背常用方法(笔试填空 / 编程题必考,100% 考到)

所有方法和 Collection 通用,Set 的核心方法就是这些,全部背会:

  1. add(E e) :添加元素。如果元素重复,添加失败,返回 false,不会报错,不会存入集合(去重核心);
  2. size() :获取集合中有效元素的个数;
  3. remove(E e) :删除指定元素,删除成功返回 true;
  4. contains(E e) :判断集合中是否包含指定元素,返回布尔值;
  5. clear() :清空集合所有元素;
  6. isEmpty() :判断集合是否为空,返回布尔值。

✅ 关键注意点

因为 Set无下标,所以没有 get(index)remove(index) 这类索引相关的方法!


四、HashSet 去重原理(笔试填空 原题,重中之重)

✅ 填空题原题(你考过的题,答案固定)

为了保证 HashSet 中存储元素内容不重复,需要覆盖 hashCode()equals() 方法。

✅ HashSet 如何判断元素是否重复?(底层逻辑,背会即可)

HashSet 判断两个元素是否为「重复元素」,遵循严格的两步规则,缺一不可:

  1. 先调用元素的 hashCode() 方法,获取哈希值
    • 如果哈希值不同 → 判定为不同元素,直接存入;
    • 如果哈希值相同 → 进入第二步校验;
  2. 再调用元素的 equals() 方法,比较元素的实际内容
    • 如果 equals 返回false → 判定为不同元素,存入;
    • 如果 equals 返回true → 判定为重复元素,拒绝存入。

✅ 补充说明

  • 对于 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 集合 易错点 + 避坑指南(选择题高频坑,必看)

  1. ❌ 错误:Set set = new Set(); → Set 是接口,不能实例化,必须写new HashSet()
  2. ❌ 错误:用普通 for 循环遍历 Set → Set 无下标,没有get(index)方法,会编译报错;
  3. ❌ 错误:认为 HashSet 能保留顺序 → HashSet 是无序的,要想「去重 + 保序」,用LinkedHashSet(考试极少考);
  4. ✔ 正确:HashSet 添加重复元素时,不会报错,只是添加失败,返回 false;
  5. ✔ 正确:Set 集合的所有方法都继承自 Collection,没有专属方法。

✨ 终极总结:Set 集合 必考考点速记(背会 = 满分,无冗余)

✅ 核心特性

Set:无序、不可重复、无下标 | List:有序、可重复、有下标

✅ 核心实现类

HashSet(首选、必考)

✅ 核心方法

add () 添加、size () 长度、contains () 判断包含,无索引相关方法

✅ 核心原理

HashSet 去重依赖:hashCode() + equals()

✅ 核心遍历

只能用「增强 for」或「迭代器」,不能用普通 for 循环

✅ 核心考点

Set 和 List 的特性区分、HashSet 去重、Set 的实例化写法


所有内容都是考试的核心考点,没有多余知识点,看完这份笔记,Set 集合相关的所有题目都能轻松做对!✅

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐