Set 是一种不包含重复元素的集合,常用于去重、判重、集合运算等场景。是否适合使用 Set,关键看你是否关心元素唯一性以及是否不关心顺序。
下面从适用场景、常见例子、不适合的场景来说明。
当你需要自动去除重复数据时使用 Set。
示例:
Set<String> set = new HashSet<>();
set.add("apple");
set.add("apple");
set.add("banana");
// 结果只有 apple 和 banana
常见业务:
Set 的查找效率通常很高(尤其是 HashSet)
示例:
Set<Integer> vipIds = new HashSet<>();
vipIds.add(1001);
if (vipIds.contains(1001)) {
// 是 VIP
}
适合:
Set 天然支持数学集合操作
Set<Integer> a = new HashSet<>(Set.of(1,2,3));
Set<Integer> b = new HashSet<>(Set.of(3,4,5));
// 交集
a.retainAll(b); // [3]
// 并集
a.addAll(b);
// 差集
a.removeAll(b);
适合:
如果你不需要按插入顺序或排序访问元素,Set 比 List 更合适。
✅ 场景:
用 Set 保存“已处理 / 已存在”的状态
Set<Long> processedIds = new HashSet<>();
适合:
| Set 类型 | 特点 | 适用场景 |
|---|---|---|
HashSet |
无序、最快 | 通用去重、判重 |
LinkedHashSet |
保持插入顺序 | 需要顺序的去重 |
TreeSet |
自动排序 | 需要有序、范围查询 |
EnumSet |
专为枚举设计 | 枚举值集合 |
ConcurrentHashSet |
线程安全 | 并发场景 |
Set 不能存重复值,如果你需要统计次数,用 List 或 Map。
Set 没有 get(index),不适合顺序访问。
Set 中元素通常不应被修改(尤其是作为 key 的字段),否则可能破坏内部结构。
复杂排序建议用 List + Comparator,而不是 TreeSet。
当你只关心“是否存在 / 是否唯一 / 是否重复”,而不关心顺序和索引时,优先考虑 Set。
如果你愿意,可以告诉我你具体的使用场景(比如 Java / Python / 数据库 / 缓存),我可以帮你选最合适的 Set 类型和实现方式。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。