7-1 jmu-Java-04面向对象进阶--02-接口-Comparator

news/2024/10/3 22:27:54/

Arrays.sort可以对所有实现Comparable的对象进行排序。但如果有多种排序需求,如有时候需对name进行降序排序,有时候只需要对年龄进行排序。使用Comparable无法满足这样的需求。可以编写不同的Comparator来满足多样的排序需求。

1.编写PersonSortable2类

属性:private name(String)private age(int)
有参构造函数:参数为name,age
toString方法:返回格式name-age

2 编写Comparator类

  1. 编写NameComparator类,实现对name进行升序排序
  2. 编写AgeComparator类,对age进行升序排序

3.main方法中

  1. 输入n
  2. 输入n行name age,并创建n个对象放入数组
  3. 对数组按照name进行升序排序后输出。
  4. 在3的基础上对数组按照age进行升序排序后输出。
  5. 最后最后两行使用如下代码输出NameComparator与AgeComparator所实现的所有接口。
System.out.println(Arrays.toString(NameComparator.class.getInterfaces()));
System.out.println(Arrays.toString(AgeComparator.class.getInterfaces()));

输入样例:

5
zhang 15
zhang 12
wang 14
Wang 17
li 17

输出样例:

NameComparator:sort
Wang-17
li-17
wang-14
zhang-15
zhang-12
AgeComparator:sort
zhang-12
wang-14
zhang-15
Wang-17
li-17
//最后两行是标识信息
java">import java.util.Arrays; // 用于使用Arrays.sort()方法进行数组排序
import java.util.Scanner; // 用于从输入流中读取不同类型的数据
import java.util.Comparator; // Comparator类在这里面,用于创建比较器// 创建PersonSortable2类
class PersonSortable2 {private String name; // 定义私有属性nameprivate int age; // 定义私有属性age//根据题意定义了一个有参构造方法,无返回值不要加voidpublic PersonSortable2(String name, int age) {this.age = age; // 使用this关键字将形参age赋值给成员变量agethis.name = name; // 使用this关键字将形参name赋值给成员变量name}// 自动生成的Getter和Setter方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}// 重写toString()方法@Overridepublic String toString() {return this.name + "-" + this.age;}
}// 创建NameComparator类实现Comparator接口
//implements Comparator<T>;中T为比较对象的类型
class NameComparator implements Comparator<PersonSortable2> {public int compare(PersonSortable2 o1, PersonSortable2 o2) {int result = o1.getName().compareTo(o2.getName()); // 使用compareTo()方法比较字符串类型name;return result;}
}// 创建AgeComparator类实现Comparator接口
class AgeComparator implements Comparator<PersonSortable2> {public int compare(PersonSortable2 o1, PersonSortable2 o2) {if (o1.getAge() > o2.getAge()) {return 1;} else if (o1.getAge() < o2.getAge()) {return -1;} else {return 0;}}
}public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(); // 从输入流中读取一个整数nPersonSortable2[] personSortable2s = new PersonSortable2[n]; // 创建一个长度为n的PersonSortable2数组int age;String name;for (int i = 0; i < n; i++) {name = sc.next(); // 从输入流中读取一个字符串nameage = sc.nextInt(); // 从输入流中读取一个整数agepersonSortable2s[i] = new PersonSortable2(name, age); // 创建一个PersonSortable2对象并将其存储在数组中,即实例化;}System.out.println("NameComparator:sort");Arrays.sort(personSortable2s, new NameComparator()); // 使用NameComparator比较器对数组进行排序for (int i = 0; i < personSortable2s.length; i++) {System.out.println(personSortable2s[i].toString()); // 打印排序后的数组元素}System.out.println("AgeComparator:sort");//println();输出内容后换行Arrays.sort(personSortable2s, new AgeComparator()); // 使用AgeComparator比较器对数组进行排序for (int i = 0; i < personSortable2s.length; i++) {System.out.println(personSortable2s[i].toString()); // 打印排序后的数组元素}System.out.println(Arrays.toString(NameComparator.class.getInterfaces())); // 打印NameComparator类实现的接口System.out.println(Arrays.toString(AgeComparator.class.getInterfaces())); // 打印AgeComparator类实现的接口}
}

 


http://www.ppmy.cn/news/1534123.html

相关文章

Library介绍(三)

环境描述 工作条件 一般lib文件里面包含了芯片的工作条件即operation conditions&#xff0c;其指定了工艺&#xff08;process&#xff09;、温度&#xff08;temperature&#xff09;和电压&#xff08;voltage&#xff09;&#xff0c;见图1。 其中&#xff0c;process代表了…

10.2今日错题解析(软考)

目录 前言面向对象技术——设计模式的应用场景系统开发基础——概要设计与详细设计 前言 这是用来记录我备考软考设计师的错题的&#xff0c;今天知识点为设计模式的应用场景、概要设计与详细设计&#xff0c;大部分错题摘自希赛中的题目&#xff0c;但相关解析是原创&#xf…

docker的安装与启动——配置国内Docker源

移除旧版本docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 配置docker yum源。 sudo yum install -y yum-utils sudo yum-config-manager –add-repo ht…

无人机科普研学基地建设技术详解

无人机科普研学基地的建设技术详解涉及多个方面&#xff0c;包括基地建设规划、主要功能区划分、配套设备与系统、课程设计与实施等。以下是对这些方面的详细阐述&#xff1a; 一、基地建设规划 1. 目标定位&#xff1a;无人机科普研学基地旨在通过实践和学习活动&#xff0c;…

【H2O2|全栈】关于CSS(9)CSS3扩充了哪些新鲜的东西?(二)

目录 CSS3入门 前言 准备工作 伪元素补充 :before :after 文本溢出属性 转换效果 预告和回顾 后话 CSS3入门 前言 本系列博客主要介绍CSS相关的知识点。 这一期主要介绍以下几个CSS3的知识点&#xff1a; 伪元素补充文本溢出属性转换 没有基础的朋友&#xff…

Linux相关概念和重要知识点(11)(进程调度、Linux内核链表)

1.Linux调度算法 上篇文章我粗略讲过queue[140]的结构&#xff0c;根据哈希表&#xff0c;我们可以将40个不同优先级的进程借助哈希桶链入queue[140]中。调度器会根据queue的下标来进行调度。但这个具体的调度过程是怎样的呢&#xff1f;以及runqueue和queue[140]的关系是什么…

【PHP陪玩系统源码】游戏陪玩系统app,陪玩小程序优势

陪玩系统开发运营级别陪玩成品搭建 支持二开源码交付&#xff0c;游戏开黑陪玩系统: 多客陪玩系统&#xff0c;游戏开黑陪玩&#xff0c;线下搭子&#xff0c;开黑陪玩系统 前端uniapp后端php&#xff0c;数据库MySQL 1、长时间的陪玩APP源码开发经验&#xff0c;始终坚持从客户…

质数的数量

给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 示例 1&#xff1a; 输入&#xff1a;n 10 输出&#xff1a;4 解释&#xff1a;小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2&#xff1a; 输入&#xff1a;n 0 输出&#xff1a;0示例 3&#…