欢迎光临
我们一直在努力

Set 深度解析:去重、唯一性与你的智能抽屉

我们经常会遇到类似这样的场景:

有一堆文章标题,你希望去掉重复的,想记录一批用户 ID,确保每个用户唯一,想统计单词出现次数,但不关心顺序;

如果你还在用 ArrayList + 遍历去重,恭喜,你离“低效率”不远了。

在 Java 中,有一个集合专门为你解决这些问题,它叫 Set。今天,我就用生动的方式带你深入了解 Set,让它成为你最得力的小助手。

什么是 Set?

Set 是 Java 集合框架(Collection Framework)中的接口,其核心特点是:

  • 元素唯一:不能有重复元素

  • 没有索引:不像 List 可以通过下标访问

  • 可存对象:可以存自定义对象

  • 常用实现类:

    • HashSet:无序,查找快

    • LinkedHashSet:保留插入顺序

    • TreeSet:自动排序

  • 生活比喻:Set 就像一个智能抽屉,你放东西之前,它会先检查抽屉里有没有相同的东西,如果有,它会拒绝重复放入。

    Set 的趣味应用场景

  • 去重文章标题

  • 统计唯一用户 ID

  • 活动报名保证每人只有一次记录

  • 统计文章里出现过的单词

  • 想象你是咖啡店老板,每个顾客都有会员号。

    • HashSet → 快速记录会员号,不重复

    • LinkedHashSet → 按顾客进店顺序排队

    • TreeSet → 按会员号排序,自动生成排行榜

    HashSet:

    import java.util.HashSet;

    public class Demo {
    public static void main(String[] args){
    HashSet<String> set = new HashSet<>();
    set.add("Java");
    set.add("Python");
    set.add("C++");
    set.add("Java"); // 重复,自动忽略
    System.out.println(set);
    }
    }

    输出:

    [C++, Python, Java]

    你看,重复元素自动消失了,就像魔法一样。

    LinkedHashSet:顺序守护者

    import java.util.LinkedHashSet;

    LinkedHashSet<String> linkedSet = new LinkedHashSet<>();
    linkedSet.add("Java");
    linkedSet.add("Python");
    linkedSet.add("C++");
    linkedSet.add("Java"); // 重复元素被拒绝
    System.out.println(linkedSet);

    输出:

    [Java, Python, C++]

    它不仅去重,还帮你记住谁先来,让顺序不乱

    TreeSet:自动排队

    import java.util.TreeSet;

    TreeSet<Integer> treeSet = new TreeSet<>();
    treeSet.add(5);
    treeSet.add(3);
    treeSet.add(7);
    treeSet.add(5); // 重复被忽略
    System.out.println(treeSet);

    输出:

    [3, 5, 7]

    自动排序,去重还排好队,省时省力,非常适合做成绩榜、排行榜。

    Set 遍历:轻松读取内容

    for(String s : linkedSet){
    System.out.println(s);
    }

    // 或 Java 8 Lambda
    linkedSet.forEach(System.out::println);

    Set 存自定义对象

    class Article {
    int id;
    String title;
    public Article(int id, String title){
    this.id = id;
    this.title = title;
    }
    @Override
    public int hashCode(){ return id; }
    @Override
    public boolean equals(Object obj){
    if(!(obj instanceof Article)) return false;
    return this.id == ((Article)obj).id;
    }
    }

    HashSet<Article> articles = new HashSet<>();
    articles.add(new Article(1,"Java基础"));
    articles.add(new Article(2,"HashSet实战"));
    articles.add(new Article(1,"Java基础")); // 重复对象不会加入

    哈希值就像身份证,Set 用它确认对象唯一性。

    Set 的常用方法

    方法功能
    add(E e) 添加元素,重复元素不加入
    remove(E e) 删除元素
    contains(E e) 判断元素是否存在
    size() 获取集合大小
    isEmpty() 判断集合是否为空
    clear() 清空集合
    forEach() 遍历元素

    HashSet 去重快速,LinkedHashSet 保留顺序,TreeSet 自动排序

    赞(0)
    未经允许不得转载:171主机测评 » Set 深度解析:去重、唯一性与你的智能抽屉
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址