比较器的使用
【1】以INT类型为案例
比较思路:将比较的数据做差,然后返回一个int类型的数据,将这个int类型的数值 按照=0>0<0
public class Test { //这是一个main方法:是程序的入口 public static void main(String[] args) { int a=10; int b=20; System.out.println(a-b);//=0>0<0 } }
【2】比较String类型数据
String类实现了Comparable接口,这个接口中有一个抽象方法compareTo,String类中对这个方法进行了重写
public class Test { //这是一个main方法:是程序的入口 public static void main(String[] args) { /*int a=10; int b=20; System.out.println(a-b);//=0>0<0*/ String a="A"; String b="B"; a.compareTo(b); } }
【3】比较double类型数据:
public class Test { //这是一个main方法:是程序的入口 public static void main(String[] args) { /*int a=10; int b=20; System.out.println(a-b);//=0>0<0*/ /*String a="A"; String b="B"; a.compareTo(b);*/ double a=9.6; double b=8.3; System.out.println(((Double) a).compareTo((Double) b)); } }
【4】比较自定义数据类型
(1)内部比较器
package com.msb.test07; /** * @author : liu * 日期:14:29:06 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Student implements Comparable<Student>{ private int age; private double height; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Student(int age, double height, String name) { this.age = age; this.height = height; this.name = name; } @Override public String toString() { return "Student{" + "age=" + age + ", height=" + height + ", name='" + name + '\'' + '}'; } @Override public int compareTo(Student o) { /*return this.getAge()-o.getAge();*/ //return ((Double)(this.getHeight())).compareTo(((Double) o.getHeight())); return this.getName().compareTo(o.getName()); } }
package com.msb.test07; /** * @author : liu * 日期:14:30:19 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Test02 { //这是一个main方法:是程序的入口 public static void main(String[] args) { //比较两个学生: Student s1=new Student(10,160.5,"lili"); Student s2=new Student(14,170.5,"nana"); System.out.println(s1.compareTo(s2)); } }
(2)外部比较器
package com.msb.test08; import java.util.Comparator; /** * @author : liu * 日期:14:29:06 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Student { private int age; private double height; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Student(int age, double height, String name) { this.age = age; this.height = height; this.name = name; } @Override public String toString() { return "Student{" + "age=" + age + ", height=" + height + ", name='" + name + '\'' + '}'; } } class BiJiao01 implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { //比较年龄 return o1.getAge()-o2.getAge(); } public BiJiao01() { } } class BiJiao02 implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { //比较姓名 return o1.getName().compareTo(o2.getName()); } public BiJiao02() { } }
class BjJiao03 implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { if (o1.getAge()-o2.getAge()==0){ return ((Double)(o1.getHeight())).compareTo(((Double)(o2.getHeight()))); }else{ return o1.getAge()-o2.getAge(); } } public BjJiao03() { } }
package com.msb.test08; import java.util.Comparator; /** * @author : liu * 日期:14:30:19 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Test02 { //这是一个main方法:是程序的入口 public static void main(String[] args) { //比较两个学生: Student s1=new Student(0,160.5,"lili"); Student s2=new Student(14,170.5,"nana"); //获取外部比较器 Comparator bj1=new BiJiao02(); System.out.println(bj1.compare(s1, s2)); } }
【5】外部比较器和内部比较器那个好
答案:外部比较器,多态扩展性好
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本