Java Set 怎么用
刚接触编程的人,可能会遇到这种情况:写代码时需要存一串名字,但怕重复——比如班级花名册,绝不能有两个一模一样的名字;或者要统计今天喝的饮料,可不想把“可乐”写三遍。这时候就需要一个能“自动去重”的工具,Java里的Set就是干这个的,今天咱们就用生活里的例子,把它讲明白。
Set到底是什么?
你可以把Set想象成一个“不允许重名的班级点名册”。和普通的本子不一样,这个本子有个死规矩:不管你往里面写多少次“张三”,最终只会留一次。而且它不按顺序存名字,不像按学号排列的花名册,你随便放,它只要不重复就收。

举个日常的例子:周末你想给朋友点奶茶,怕重复点同款,就把想点的品类一个个记在Set里。第一次加“珍珠奶茶”,Set收下;第二次再加“珍珠奶茶”,Set直接忽略,不会出现两个“珍珠奶茶”。这样最后拿到的Set里,就是你真正想点的、没有重复的奶茶清单。
常用的三种Set,选哪个?
Java里的Set有好几种,最常用的是三个,就像三种不同的点名册,适用于不同场景:
第一种是HashSet,就是咱们刚才说的那种“不按顺序,只认不重复”的。比如你把今天要带的水果(苹果、香蕉、橘子)放进HashSet,拿出来的顺序可能是苹果、橘子、香蕉,也可能是其他排列,不影响用,只要知道都在就行。它的优点是快,加东西、查东西都不用绕弯子,大部分时候用它最省心。
第二种是TreeSet,它是“按顺序排列的点名册”。比如你要把全班同学按名字首字母排序存起来,就用TreeSet。把“张三”“李四”“王五”加进去,取出来的时候会自动按A到Z排好,不用你手动排序。适合需要按规则排序的场景,比如存学生成绩,最后要从低到高输出。
第三种是LinkedHashSet,算是前两个的“结合体”。它既保证不重复,又能记住你放东西的顺序。比如你先加“珍珠奶茶”,再加“柠檬茶”,最后取出来的顺序就是你放的顺序,不会乱。适合需要保留添加顺序,同时又不允许重复的情况,比如记录一天的购物清单,不想重复买同一类东西,还要知道买的先后。
日常用Set的几个小技巧
刚用Set的人,最容易踩两个坑,记住这几点就不会错:
第一个,判断有没有重复,用“add方法”就够了。比如你想加一个名字,直接写set.add("张三"),如果返回true,说明加成功了(是新名字);如果返回false,说明已经有这个名字了,不用重复加。不用你自己一个个比,Set自动帮你判断。
第二个,遍历Set别用错方法。比如你要把Set里的奶茶一个个打印出来,别用普通的“按索引循环”——因为Set没有索引,它不按顺序编号。正确的做法是用“foreach循环”,比如for(String drink : set) { System.out.println(drink); },不管是HashSet、TreeSet还是LinkedHashSet,这个方法都能用。
第三个,别试图存重复的东西。比如你已经存了“可乐”,再想存一次,Set会直接拒绝,不会报错,但也不会给你加进去,这是它的特性,不是bug,不用慌。
其实Set的核心就是“不重复的集合”,只要你记住“需要去重就用它,需要顺序再选具体类型”,日常写代码里的去重、有序存东西的需求,基本都能搞定。多试几次,你会发现它比手动去重省事太多了。