# Set基础
作者:Ethan.Yang
博客:https://blog.ethanyang.cn (opens new window)
Set 接口是 Java 集合框架中用于表示无重复元素集合的接口。与 List 不同,Set 不保证元素的顺序(除了 LinkedHashSet 和 TreeSet 的特定顺序),且不允许重复元素。
# 一、HashSet
# 特点:
- 底层基于 HashMap 实现。
- 元素 无序、不重复。
- 允许存储
null(只能存一个)。
# 应用场景:
- 快速去重。
- 不关注元素顺序的集合存储场景。
# 常用API:
add(E e):添加元素remove(Object o):删除元素contains(Object o):判断是否存在size():获取集合大小
# 示例代码:
import java.util.HashSet;
public class HashSetDemo {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("Java"); // 重复元素无效
System.out.println("HashSet内容:" + set);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 二、LinkedHashSet
# 特点:
- 继承自
HashSet,底层由 LinkedHashMap 实现。 - 保证元素的 插入顺序。
- 同样不允许重复元素。
# 应用场景:
- 需要去重且希望保留插入顺序的场景,如缓存数据记录。
# 示例代码:
import java.util.LinkedHashSet;
public class LinkedHashSetDemo {
public static void main(String[] args) {
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("C");
set.add("A");
set.add("B");
System.out.println("插入顺序保留:" + set);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 三、TreeSet
# 特点:
- 底层基于 红黑树(TreeMap) 实现。
- 元素自动按 自然顺序 或 自定义比较器 排序。
- 不允许
null元素(因无法比较大小)。
# 应用场景:
- 数据需要自动排序的集合,如排行榜、字典表。
# 示例代码:
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Integer> set = new TreeSet<>();
set.add(5);
set.add(3);
set.add(7);
System.out.println("自动排序:" + set); // 输出:[3, 5, 7]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12