JAVA Set集合练习

1.使用TreeSet类实现定制排序(降序)

import java.util.*;

public class ert {
    public static void main(String[] args) {
        Set<Integer>set=new TreeSet<>();/*升序*/
        set.add(-7);
        set.add(-4);
        set.add(3);
        set.add(10);
        set.add(6);
        Iterator it=set.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
        /*升序排法
        Set<Integer>set2=new TreeSet<>(Compartor.reverseOrder());
         */
    }
}

2.运用Hashset打印一个图书发票

import java.util.Objects;
/*创建构造方法*/
public class bookself {
    String name;
    String author;
    double price;

    public bookself(String name, String author, double price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        bookself bookself = (bookself) o;
        return name.equals(bookself.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}


/*测试类排序*/
public class booker {
    public static void main(String[] args) {
        Set<bookself>set=new HashSet();
        bookself p1=new bookself("JAVA入门到精通第三版","明日科技著编",59.8);
        bookself p2=new bookself("JAVA Web入门到精通","明日科技著编",67.8);
        bookself p3=new bookself("JAVA从入门到精通<实例版>","明日科技著编",69.8);
        set.add(p1);
        set.add(p2);
        set.add(p3);
        Iterator<bookself>it=set.iterator();
        System.out.print("书名\t"+"              作者\t"+"           价格\t"+"\n");
        System.out.println("----------------------------------------------------\n");
        while (it.hasNext()){
            bookself its= (bookself) it.next();
            System.out.println(its.getName()+"\t"+its.getAuthor()+"\t"+its.price+"\n");



        }

    }
}

<think>好的,用户想要寻找关于JavaSet集合的经典代码示例和练习。我需要先回忆一下Set集合的基本概念和常用实现,比如HashSetTreeSet和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. 实现两个超大集合的高效交集运算
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值