java中Set集合

特点是无序不重复

常用方法:

public int size();

public boolean isEmpty();

public boolean contains(Object o);

public Iterator iterator();

public boolean add(Object o);

public boolean remove(Object o);

public boolean removeAll(Collection c);

public void clear();


继承自Collection接口,其常用子接口HashSee->LinkedHashSet

<think>好的,用户想要寻找关于JavaSet集合的经典代码示例和练习。我需要先回忆一下Set集合的基本概念和常用实现类,比如HashSet、TreeSet和LinkedHashSet。根据引用内容,用户可能已经了解Set的基本特性,比如不允许重复元素,以及如何通过比较器或自然排序来排序元素。 首先,我应该提供一些基础的代码示例,展示如何创建Set、添加元素、遍历等操作。比如使用HashSet的简单例子,然后引入TreeSet的自然排序和定制排序。引用中提到需要比较器类,所以可能需要演示如何实现Comparator接口。 接下来,用户可能需要更复杂的练习,比如去重、集合运算(交集、并集、差集)或者结合泛型使用。引用中的泛型方法示例可能相关,可以展示如何在Set中使用泛型。 还要考虑实际应用场景,比如统计单词数量,处理学生成绩排名等。这些例子能帮助用户理解Set的实际用途。同时,引用中提到的TreeMap可能需要稍微提及,但重点应放在Set上。 需要确保代码语法正确,符合用户提供的引用中的格式。比如,比较器类的实现,自然排序通过Comparable接口,以及使用Lambda表达式简化代码。此外,用户可能需要了解线程安全的Set,所以可以提到ConcurrentSkipListSet,并给出示例。 最后,生成相关问题,帮助用户进一步学习,比如性能分析、线程安全的选择、比较器与Comparable的区别等。这些问题应基于提供的引用和常见的学习难点。 现在,整理这些思路,分步骤给出示例代码,并确保每个例子都有注释说明,符合用户的要求。同时,引用相关的引用内容,比如比较器类和自然排序的实现,以增强答案的可靠性。</think>以下是一些Java Set集合的经典代码示例和练习,结合了基础操作、应用场景和进阶技巧: ### 一、基础操作示例 1. **HashSet去重** ```java Set<String> cities = new HashSet<>(); Collections.addAll(cities, "北京", "上海", "广州", "北京", "深圳"); System.out.println(cities); // 输出:[北京, 上海, 广州, 深圳] 自动去重[^3] ``` 2. **TreeSet自然排序** ```java Set<Integer> scores = new TreeSet<>(); scores.add(85); scores.add(90); scores.add(78); System.out.println(scores); // 输出:[78, 85, 90] 自动排序 ``` ### 二、对象排序实践 3. **实现Comparable接口(自然排序)** ```java class Student implements Comparable<Student> { String name; int score; @Override public int compareTo(Student o) { return Integer.compare(this.score, o.score); // 按分数排序 } } Set<Student> stuSet = new TreeSet<>(); stuSet.add(new Student("王五", 90)); stuSet.add(new Student("李四", 85)); // 自动按分数升序排列 ``` 4. **使用Comparator定制排序**(引用[2]的Comparator实现) ```java Set<String> words = new TreeSet<>((s1, s2) -> s2.length() - s1.length()); // 按字符串长度降序排列 words.add("apple"); words.add("banana"); words.add("cat"); System.out.println(words); // 输出:[banana, apple, cat][^2] ``` ### 三、集合运算练习 5. **集合交集/并集/差集** ```java Set<Integer> setA = new HashSet<>(Arrays.asList(1,2,3)); Set<Integer> setB = new HashSet<>(Arrays.asList(2,3,4)); // 交集 setA.retainAll(setB); // 结果:[2,3] // 并集 setA.addAll(setB); // 结果:[1,2,3,4] // 差集 setA.removeAll(setB); // 结果:[1] ``` ### 四、高级应用示例 6. **统计单词频率** ```java String text = "this is a test text test"; Set<String> uniqueWords = new HashSet<>(Arrays.asList(text.split(" "))); System.out.println("Unique words count: " + uniqueWords.size()); ``` 7. **线程安全的有序集合** ```java Set<String> concurrentSet = new ConcurrentSkipListSet<>(); concurrentSet.add("A"); concurrentSet.add("C"); concurrentSet.add("B"); System.out.println(concurrentSet); // 保持线程安全的有序状态 ``` ### 推荐练习方向 1. 实现一个去重且保留插入顺序的集合(LinkedHashSet) 2. 编写比较器实现多字段排序(先按年龄降序,再按姓名升序) 3. 使用Stream API操作Set集合 4. 实现两个超大集合的高效交集运算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值