Java集合(Set)的用法(附带实例)
Java 中的 Set 集合是由一串无序的、不能重复的相同类型元素构成的集合。
图下所示是一个球队的 Set 集合,这个 Set 集合中又包含了若干球员,这些球员不能重复。

图 1 Set集合
List 集合中的元素是有序的、可重复的,而 Set 集合中的元素是无序的、不能重复的。List 集合强调的是有序,Set 集合强调的是不重复。当不考虑顺序且没有重复元素时,Set 集合和 List 集合是可以互相替换的。
Java 中描述 Set 集合的接口是 Set,它的直接实现类主要是 HashSet 和 TreeSet,其中 HashSet 是基于散列表数据结构的实现。
示例代码如下:
程序的运行结果如下:
示例代码如下:
Set 集合的特点如下:
常见的 Set 集合实现类如下:
通过下面的实例,我们回顾一下 Set 集合的常见用法,包括添加元素和遍历集合等操作:
图下所示是一个球队的 Set 集合,这个 Set 集合中又包含了若干球员,这些球员不能重复。

图 1 Set集合
List 集合中的元素是有序的、可重复的,而 Set 集合中的元素是无序的、不能重复的。List 集合强调的是有序,Set 集合强调的是不重复。当不考虑顺序且没有重复元素时,Set 集合和 List 集合是可以互相替换的。
Java 中描述 Set 集合的接口是 Set,它的直接实现类主要是 HashSet 和 TreeSet,其中 HashSet 是基于散列表数据结构的实现。
Java Set接口的常用方法
Set 接口也继承自 Collection 接口,Set 接口中大部分都继承自 Collection 接口,这些方法如下。1) 操作元素
- add(Object element):在 Set 集合的尾部添加指定的元素。该方法是从 Collection 接口继承过来的;
- remove(Object element):如果 Set 集合中存在指定元素,则从 Set 集合中移除该元素。该方法是从 Collection 集合继承过来的;
- clear():从 Set 集合中移除所有元素。该方法是从 Collection 集合继承过来的。
2) 判断元素
- isEmpty():判断 Set 集合中是否有元素,如果没有,返回 true,如果有,返回 false。该方法是从 Collection 接口继承过来的;
- contains(Object element):判断 Set 集合中是否包含指定元素,如果包含,返回 true,如果不包含,返回 false。该方法是从 Collection 接口继承过来的。
3) 其他
- size():返回 Set 集合中的元素数,返回值是 int 类型的。该方法是从 Collection 接口继承过来的;
- forEach():遍历集合。
示例代码如下:
import java.util.HashSet; import java.util.Set; public class Main { public static void main(String args[]) { Set<Integer> players = new HashSet<>(); // 声明 Set 用于存储球员编号 // 向集合中添加球员编号 players.add(10); players.add(11); players.add(12); players.add(13); players.add(13); // ① // 打印球员编号 System.out.println("--球员编号--"); for (Integer player : players) { System.out.println("球员编号:" + player); } } }上述代码创建了 Set 集合对象,然后试图添加元素到 Set 集合中,需要注意的是,当代码第 ① 处试图插入重复元素时,是不能插入的,因此虽然多次添加数据,但是只保留一个。
程序的运行结果如下:
--球员编号--
球员编号:10
球员编号:11
球员编号:12
球员编号:13
Java遍历Set集合
遍历 Set 集合有如下两种方法:- 使用 Java 风格 for 循环(增强 for 循环)遍历。增强 for 循环是针对遍历各种类型的集合而推出的,推荐使用这种遍历方法;
- 使用 forEach() 方法遍历。
示例代码如下:
import java.util.HashSet; import java.util.Set; public class Main { public static void main(String[] args) { // 创建一个 set 集合并添加球员编号 Set<Integer> players = new HashSet<>(); players.add(10); players.add(11); players.add(12); players.add(13); // 使用增强 for 循环遍历 Set 集合 System.out.println("--使用 Java 风格的增强 for 循环遍历--"); for (Integer player : players) { System.out.println("球员编号:" + player); } // 使用 forEach() 方法遍历 Set 集合 System.out.println("--使用 forEach() 方法遍历--"); players.forEach(player -> { System.out.println("球员编号:" + player); }); } }程序的运行结果如下:
--使用 Java 风格的增强 for 循环遍历--
球员编号:10
球员编号:11
球员编号:12
球员编号:13
--使用 forEach() 方法遍历--
球员编号:10
球员编号:11
球员编号:12
球员编号:13
总结
Set 集合是 Java 集合框架中的一种实现,它不允许包含重复的元素,每个元素在 Set 集合中都是唯一的。Set 集合的特点如下:
- 不允许重复元素:Set 集合中不会包含相同的元素,保证了每个元素的唯一性;
- 无序:Set 集合不保证元素的顺序,元素存储的顺序可能与添加的顺序不同;
- 高效查找:Set 集合内部使用了哈希表等数据结构,使得查找元素的速度非常快。
常见的 Set 集合实现类如下:
- HashSet:基于哈希表实现,是最常用的 Set 集合;
- TreeSet:基于 TreeMap 实现,可以对元素进行排序;
- LinkedHashSet:基于哈希表和链表实现,保留元素的插入顺序。
通过下面的实例,我们回顾一下 Set 集合的常见用法,包括添加元素和遍历集合等操作:
import java.util.HashSet; class Student { private int id; private String name; public Student(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return name; } public void setName(String s) { this.name = s; } } public class Main { public static void main(String[] args) { HashSet<Student> studentSet = new HashSet<>(); studentSet.add(new Student(101, "John")); studentSet.add(new Student(103, "Amy")); studentSet.add(new Student(102, "Mike")); for (Student student : studentSet) { System.out.println("学生 ID:" + student.getId() + ", 姓名:" + student.getName()); } } }程序的运行结果如下:
学生 ID:101, 姓名:John
学生 ID:103, 姓名:Amy
学生 ID:102, 姓名:Mike