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

Java——比较器(一文搞懂比较器Comparable和Comparator)

  • 基于Comparable的接口类
  • 基于Comparator的接口类

1、比较器的Comparable接口类

Comparable类的定义:

public interface Comparable<T>{  public int compareTo(T o);  }

2、Comparable比较器的返回值:

此方法返回一个int类型的数据,但是此int的值只能是以下三种:
1: 表示大于
-1:表示小于
0: 表示相等

3、Comparable示例

class Student implements Comparable<Student>{  private String name;  private int age;  private float score;  public Student(String name,int age,float score){  this.name = name;  this.age = age;  this.score = score;  }  public String toString(){  return name+"\t\t"+this.age+"\t\t"+this.score;  }  public int compareTo(Student stu){  if(this.score>stu.score){  return -1;  }else if(this.score<stu.score){  return 1;  }else{  if(this.age > stu.age){  return 1;  }else if(this.age < stu.age){  return -1;  }else{  return 0;  }  }  }  
}  
public class ComparableDemo01{  public static void main(String args[]){  Student stu[] = {new Student("张三",20,99.0f),new Student("李四",22,90.0f),new Student("王五",22,100.0f)};  java.util.Arrays.sort(stu);    //进行排序操作  for(int i=0;i<stu.length;i++){    //循环输出数组内容  System.out.println(stu[i]);  }  }  
} 

4、比较器的Comparable接口类

示例

import java.util.* ;  
class Student{    // 指定类型为Student  private String name ;  private int age ;  public Student(String name,int age){  this.name = name ;  this.age = age ;  }  public boolean equals(Object obj){    // 覆写equals方法  if(this==obj){  return true ;  }  if(!(obj instanceof Student)){  return false ;  }  Student stu = (Student) obj ;  if(stu.name.equals(this.name)&&stu.age==this.age){  return true ;  }else{  return false ;  }  }  public void setName(String name){  this.name = name ;  }  public void setAge(int age){  this.age = age ;  }  public String getName(){  return this.name ;  }  public int getAge(){  return this.age ;  }  public String toString(){  return name + "\t\t" + this.age  ;  }  
};  class StudentComparator implements Comparator<Student>{    // 实现比较器  // 因为Object类中本身已经有了equals()方法  public int compare(Student s1,Student s2){  if(s1.equals(s2)){  return 0 ;  }else if(s1.getAge()<s2.getAge()){    // 按年龄比较  return 1 ;  }else{  return -1 ;  }  }  
};  public class ComparatorDemo{  public static void main(String args[]){  Student stu[] = {new Student("张三",20),  new Student("李四",22),new Student("王五",20),  new Student("赵六",20),new Student("孙七",22)} ;  java.util.Arrays.sort(stu,new StudentComparator()) ;    // 进行排序操作  for(int i=0;i<stu.length;i++){    // 循环输出数组中的内容  System.out.println(stu[i]) ;  }  }  
};
http://www.lryc.cn/news/214994.html

相关文章:

  • 企业直播招聘抖音报白如何实现?怎么样才能报白成功?
  • 【考研数学】概率论与数理统计 —— 第七章 | 参数估计(2,参数估计量的评价、正态总体的区间估计)
  • 【设计模式】第10节:结构型模式之“组合模式”
  • 改进YOLOv3!IA-YOLO:恶劣天气下的目标检测
  • Vue路由跳转的几种方式
  • TiDB x 汉口银行丨分布式数据库应用实践
  • uci机器学习数据库简介
  • 多人协作使用git如何解决冲突?
  • 基于【逻辑回归】的评分卡模型金融借贷风控项目实战
  • 企业拉美跨境出海面对时延情况怎么办?
  • 【vector题解】只出现一次的数字 | 电话号码的数字组合
  • VS2022 开发方式
  • 【Python语言速回顾】——数据可视化基础
  • java实现pdf文件添加水印,下载到浏览器
  • 代码随想录算法训练营第四十一天丨 动态规划part04
  • PyCharm免费安装和新手使用教程
  • 使用Python的Scikit-Learn进行决策树建模和可视化:以隐形眼镜数据集为例
  • 开源软件:释放创新的力量,改变数字世界的游戏规则
  • 【QT】鼠标常用事件
  • LuatOS-SOC接口文档(air780E)--mlx90640 - 红外测温(MLX90640)
  • java连接本地数据库可以简写为///
  • 基于springboot漫画动漫网站
  • autoFac 生命周期 试验
  • foreach、for in 和for of的区别?
  • 【Effective C++】条款45: 运用成员函数模板接受所有兼容的类型
  • WSL1 安装 debian xfce 用xrdp 导入远程桌面
  • WPF RelativeSource属性-目标对象类型易错
  • Java while 和do while 循环
  • 应用软件安全编程--03净化传递给 Runtime.exec() 方法的非受信数据
  • uniapp阻止冒泡的方法,点击事件嵌套点击事件,怎么阻止同时触发