当前位置: 首页 > article >正文

【Java】泛型与集合篇(四)

泛型与集合(四)

  • Collections 类
    • 排序
    • 查找
    • 打乱元素次序
    • 求极值
    • 其他方法

Collections 类

Collections 类是 Java 集合框架中的一个工具类,位于 java.util 包下。它提供了一系列静态方法,用于对集合(如 List、Set、Map 等)进行各种操作,包括排序、查找、重排、求极值以及其他方法等。

排序

  • 自然排序:sort(List<T> list)
    • 原理
      此方法用于对实现了 Comparable 接口的元素组成的 List 集合进行自然排序。Comparable 接口定义了一个 compareTo 方法,元素通过该方法来确定自身与其他元素的大小关系。排序时,Collections.sort 方法会调用元素的 compareTo 方法进行比较和排序。
  • 自定义排序:sort(List<T> list, Comparator<? super T> c)
    • 原理
      当元素没有实现 Comparable 接口,或者需要按照不同于自然顺序的规则进行排序时,可以使用该方法。通过传入一个 Comparator 接口的实现类,Comparator 接口定义了一个 compare 方法,用于比较两个元素的大小。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

// 定义一个实现了 Comparable 接口的类,用于自然排序演示
class Student implements Comparable<Student> {
   
    private String name;
    private int age;

    public Student(String name, int age) {
   
        this.name = name;
        this.age = age;
    }

    // 重写 compareTo 方法,按照年龄进行自然排序
    @Override
    public int compareTo(Student other) {
   
        return Integer.compare(this.age, other.age);
    }

    @Override
    public String toString() {
   
        return "Student{name='" + name + "', age=" + age + "}";
    }
}

// 定义一个普通类,用于自定义排序演示
class Course {
   
    private String courseName;
    private double price;

    public Course(String courseName, double price) {
   
        this.courseName = courseName;
        this.price = price;
    }

    public String getCourseName() {
   
        return courseName;
    }

    public double getPrice() {
   
        return price;
    }

    @Override
    public String toString() {
   
        return "Course{courseName='" + courseName + "', price=" + price + "}";
    }
}

public class CollectionsSortDemo {
   
    public static void main(String[] args) {
   
        // 自然排序演示
        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student("Alice", 22));
        studentList.add(new Student("Bob", 20));
        studentList.add(new Student("Charlie", 25));

        System.out.println("自然排序前的学生列表:");
        for (Student student : studentList) {
   
            System.out.println(student);
        }

        // 使用 Collections.sort 进行自然排序
        Collections.sort(studentList);

        System.out.println("\n自然排序后的学生列表:");
        for (Student student : studentList) {
   
            System.out.println(student);
        }

        // 自定义排序演示
        List<Course> courseList = new ArrayList<>();
        courseList.add(new Course("Java Programming", 200.0));
        courseList.add(new Course("Python Basics", 150.0));
        courseList.add(new Course("Data Science", 300.0));

        System.out.println("\n自定义排序前的课程列表:");
        for (Course course : courseList) {
   
            System.out.println(course);
        }

        // 自定义比较器,按照课程价格从高到低排序
        Comparator<Course> priceComparator = (c1, c2) -> Double.compare(c2.getPrice(), c1.getPrice());
        // 使用 Collections.sort 进行自定义排序
        Collections.sort(courseList, priceComparator);

        System.out.println("\n自定义排序后的课程列表:");
        for (Course course : courseList) {
   
            System.out.println(course);
        }
    }
}

代码解释:

  1. 自然排序部分:
    • 定义了 Student 类并实现了 Comparable 接口,重写了 compareTo 方法,使其按照学生的年龄进行自然排序。
    • 创建了一个 Student 对象的列表 studentL

http://www.kler.cn/a/551749.html

相关文章:

  • C++ Primer 类的其他特性
  • 关于Flutter前端面试题及其答案解析
  • 【Go语言快速上手】第二部分:Go语言进阶之数据库操作
  • 【设计模式】【结构型模式】代理模式(Proxy)
  • Node.js 中 cors 依赖详解
  • MVTEC数据集笔记
  • 【C++】Basic Data Types and Operators
  • C# 适合做什么项目?全面解析 C# 的应用领域与优势
  • C语言——指针基础知识
  • 六、敏捷开发工具:项目管理工具
  • Ubuntu22.04系统安装使用Docker
  • 【个人总结】7. Linux 工作三年的嵌入式常见知识点梳理及开发技术要点(欢迎指正、补充)
  • 从零开始构建一个小型字符级语言模型的详细教程(基于Transformer架构)之二模型架构设计
  • 高效执行自动化用例:分布式执行工具pytest-xdist实战!
  • 分布式理论与分布式算法
  • TS .d.ts 到底怎么用?
  • 【小白学AI系列】NLP 核心知识点(七)Embedding概念介绍
  • 构建高效 Python Web 应用:框架与服务器的选择及实践
  • 【NLP 25、模型训练方式】
  • Spring Boot实现跨域