Java Set 中的常用方法示例总结

 更新时间:2025年12月08日 09:19:43   作者:Geoking.  
Set是Java集合框架(Collection Framework)中最常用的接口之一,具有元素唯一、不允许重复 的特性,这篇文章将全面总结Java Set的常用方法并通过示例进行讲解,主要用于日常查询使用,感兴趣的朋友跟随小编一起看看吧

一、前言

Set 是 Java 集合框架(Collection Framework)中最常用的接口之一,具有 元素唯一、不允许重复 的特性。

无论你用 HashSetLinkedHashSetTreeSet,它们都实现了 Set 接口,因此拥有大量共同的方法。

这篇文章将全面总结 Java Set 的常用方法并通过示例进行讲解,主要用于日常查询使用。

二、Set 的核心特点回顾

  • 不允许重复元素
  • 无序(LinkedHashSet 有序,TreeSet 有序但基于排序)
  • 无索引,不支持下标访问
  • 判断重复依赖:
    hashCode() + equals()(TreeSet 使用 compareTo/Comparator)

三、Set 常用方法总览

以下方法来自 Set 的父接口 Collection,因此所有 Set 实现类都具备这些操作:

方法返回值说明
add(E e)boolean添加元素
remove(Object o)boolean删除指定元素
contains(Object o)boolean判断是否存在
size()int获取元素数量
isEmpty()boolean判断是否为空
clear()void清空集合
iterator()Iterator返回迭代器
addAll(Collection c)boolean合并集合
removeAll(Collection c)boolean删除多个元素
retainAll(Collection c)boolean求交集
toArray()Object[]转换为数组
forEach()void遍历(Java 8+)

接下来我们逐一讲解。

四、Set 常用方法详解

1.add(E e)—— 添加元素

Set<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("Java"); // 重复,添加失败
System.out.println(set);

返回值:

  • true:添加成功
  • false:元素已存在(Set 不允许重复)

2.remove(Object o)—— 删除元素

set.remove("Java");
System.out.println(set);

3.contains(Object o)—— 判断元素是否存在

boolean exists = set.contains("Java");
System.out.println(exists);

最常用于过滤、查重等场景。

4.size()—— 获取元素数量

int count = set.size();
System.out.println(count);

5.isEmpty()—— 判断集合是否为空

if (set.isEmpty()) {
    System.out.println("空集合");
}

6.clear()—— 清空集合

set.clear();

7.iterator()—— 迭代器遍历

Iterator<String> it = set.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

Set 无索引,因此迭代器非常重要。

8.forEach()(Java 8)

更简洁的遍历方式:

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

9.addAll(Collection c)—— 合并集合

Set<Integer> a = new HashSet<>(List.of(1, 2));
Set<Integer> b = new HashSet<>(List.of(2, 3));
a.addAll(b);
System.out.println(a);

效果类似数学中的 并集

10.removeAll(Collection c)—— 删除多个元素

a.removeAll(List.of(2));
System.out.println(a);

效果类似数学中的 差集

11.retainAll(Collection c)—— 求交集

保留与目标集合相同的元素。

Set<Integer> a = new HashSet<>(List.of(1, 2, 3));
Set<Integer> b = new HashSet<>(List.of(2, 3, 4));
a.retainAll(b);
System.out.println(a); // [2, 3]

12.toArray()—— 转换为数组

Object[] arr = set.toArray();

如果你需要指定类型:

String[] arr = set.toArray(new String[0]);

五、Set 常用操作总结(常考)

1. 去重操作

Set<Integer> set = new HashSet<>(list);

2. 判断是否包含某元素

if (set.contains(x))

3. 交集、并集、差集

// 并集
a.addAll(b);
// 交集
a.retainAll(b);
// 差集
a.removeAll(b);

4. 遍历(推荐方式)

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

六、Set 使用注意事项(易踩坑)

❗ 1. 添加自定义对象时必须重写 equals()hashCode()
否则 Set 无法正确判断重复。

❗ 2. 遍历过程中不能使用普通 for(因为无索引)
只能:

  • for-each
  • iterator
  • stream

❗ 3. HashSet 不保证顺序
如果需要顺序:

LinkedHashSet
如果需要排序:

TreeSet

七、三大 Set 类的额外方法(补充)

  1. TreeSet 拥有 first()last() 方法
TreeSet<Integer> ts = new TreeSet<>();
ts.add(3);
ts.add(1);
ts.add(2);
System.out.println(ts.first()); // 1
System.out.println(ts.last());  // 3
  1. TreeSet 支持子集操作
ts.headSet(2); // 小于 2 的元素
ts.tailSet(2); // 大于等于 2 的元素
ts.subSet(1, 3); // [1,3)

参考资料

Java Set 接口 - Java教程

Java官方文档

到此这篇关于Java Set 中的常用方法示例总结的文章就介绍到这了,更多相关java set常用方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于JAVA中stream流的基础处理(获取对象字段和对象批量处理等)

    关于JAVA中stream流的基础处理(获取对象字段和对象批量处理等)

    这篇文章主要介绍了关于JAVA中stream流的基础处理,包含获取对象字段、按字段排序、按字段去重、对象批量处理、指定字段转数组等内容,需要的朋友可以参考下
    2023-03-03
  • java token生成和校验的实例代码

    java token生成和校验的实例代码

    这篇文章主要介绍了java token生成和校验的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Spring session整合到Redis过程解析

    Spring session整合到Redis过程解析

    这篇文章主要介绍了Spring session整合到Redis过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • java大文件上传处理方法实例代码

    java大文件上传处理方法实例代码

    在Java中实现大文件上传功能,确实需要考虑到文件大小可能超出内存限制、网络传输稳定性等因素,这篇文章主要介绍了java大文件上传处理方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • Springboot+Spring Security实现前后端分离登录认证及权限控制的示例代码

    Springboot+Spring Security实现前后端分离登录认证及权限控制的示例代码

    本文主要介绍了Springboot+Spring Security实现前后端分离登录认证及权限控制的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 使用Java桥接模式打破继承束缚优雅实现多维度变化

    使用Java桥接模式打破继承束缚优雅实现多维度变化

    这篇文章主要为大家介绍了使用Java桥接模式打破继承束缚,优雅实现多维度变化,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Flink状态和容错源码解析

    Flink状态和容错源码解析

    这篇文章主要为大家介绍了Flink状态和容错源码示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Java Netty实现心跳机制过程解析

    Java Netty实现心跳机制过程解析

    这篇文章主要介绍了Java Netty实现心跳机制过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java实现JWT登录认证的示例代码

    Java实现JWT登录认证的示例代码

    Java中我们可以使用诸如JJWT这样的库来生成和验证JWT,本文主要介绍了Java实现JWT登录认证的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • 十五道tomcat面试题,为数不多的机会!

    十五道tomcat面试题,为数不多的机会!

    这篇文章主要介绍了十五道tomcat面试题,Tomcat的本质是一个Servlet容器。一个Servlet能做的事情是:处理请求资源,并为客户端填充response对象,需要的朋友可以参考下
    2021-08-08

最新评论