记得当初面试的时候遇见过一道类似这样的题,给出几个学生的成绩和年龄让根据学生的成绩进行排序,如果成绩相同则根据学生的年龄进行排序。当时傻乎乎的不知道咋整,直接根据成绩排了一下序就给输出了,最近看java基础比较器的时候才明白这道题的意思是考java基础中的比较器。
方法一、
通过实现Comparable接口进行排序,这个方法需要重写comparable接口的compareTo方法,再我们常用的许多类都实现了这个接口,如Float,Double,BigDecimal,Date等。compareTo方法的返回值有三种,即-1、0、1分别表示小于、等于、大于。
public 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"+age+"\t\t"+score; } 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; } public float getScore() { return score; } public void setScore(float score) { this.score = score; } @Override /* * 重写compareTo方法 */ public int compareTo(Student stu) { // TODO Auto-generated method stub 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; } } } }
package com.compareable; import java.util.Arrays; public class CompareableDemo1 { public static void main(String[] args) { Student s1 = new Student("李寻欢", 32, 93); Student s2 = new Student("展雄飞", 24, 98); Student s3 = new Student("叶开", 22, 91); Student s4 = new Student("傅红雪", 22, 95); Student s5 = new Student("阿飞", 24, 91); Student []stu={s1,s2,s3,s4,s5}; Arrays.sort(stu); //对stu数组进行排序 for (Student student : stu) { System.out.println(student); } } }
方法二、
通过实现Comparator接口实现排序,在上边的排序过程中Student类需要实现Comparable接口,但是如果我们即想排序而又不想动Student类时方法一就不好使了,这时候我们可以使用Comparator接口来指定我们的排序规则。
package com.compareable; public class Student1 { private String name; private int age; private float score; public Student1(String name,int age,float score){ this.name=name; this.age=age; this.score=score; } public String toString(){ return name+"\t\t"+age+"\t\t"+score; } 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; } public float getScore() { return score; } public void setScore(float score) { this.score = score; } }
package com.compareable; import java.util.Comparator; /** * * 排序规则 * */ class StudentComparator implements Comparator<Student1>{ @Override public int compare(Student1 stu1, Student1 stu2) { // TODO Auto-generated method stub if(stu1.equals(stu2)){ return 0; }else if(stu1.getScore()>stu2.getScore()){ return -1; }else if(stu1.getScore()<stu2.getScore()){ return 1; }else{ if(stu1.getAge()>stu2.getAge()){ return 1; }else { return 0; } } } }
package com.compareable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class ComparatorDemo1 { public static void main(String[] args) { Student1 s1 = new Student1("李寻欢", 32, 93); Student1 s2 = new Student1("展雄飞", 24, 98); Student1 s3 = new Student1("叶开", 22, 91); Student1 s4 = new Student1("傅红雪", 22, 95); Student1 s5 = new Student1("阿飞", 24, 91); Student1 [] stu1={s1,s2,s3,s4,s5}; Arrays.sort(stu1, new StudentComparator());//使用sort方法进行排序 for(Student1 s:stu1){ System.out.println(s); } } }
相关推荐
本篇文章是对java比较器Comparable接口与Comaprator接口进行了详细的分析介绍,需要的朋友参考下
Comparable和Comparator接口都可用作普通意义上对象间的比大小,但两个接口在实例化方面的用法不尽相同,接下来我们就来详细对比Java中的Comparable排序接口和Comparator比较器接口
在项目过程中,常会用到比较器,比较器也确实是个不错的工具,好用,值得去用.一个简单的例子,供大家学习.
实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 C 的每一个 e1 和 e2 来说,当且仅当 (e1....
主要介绍了Java 比较接口comparable与comparator区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java文本比较器 可比较两Java文件有何异同 1vv
java比较器.md
本文,先介绍Comparable 和Comparator两个接口,以及它们的差异;接着,通过示例,对它们的使用方法进行说明
java比较器的常见用法.pdf
计算机后端-Java-Java核心基础-第22章 常用类 20. Java比较器概述.avi
计算机后端-Java-Java核心基础-第23章 枚举类与注解 03. 复习:Java比较器等.avi
java比较器的常见用法[借鉴].pdf
主要介绍了Java比较器实现方法,结合具体项目案例形式分析了Java比较器相关排序操作技巧,需要的朋友可以参考下
490.488.JAVA基础教程_常用类-Java比较器概述(490).rar
主要介绍了Java比较器的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
动态比较器Java 动态比较器
Java文件选择器Java文件选择器Java文件选择器Java文件选择器Java文件选择器Java文件选择器Java文件选择器Java文件选择器Java文件选择器Java文件选择器
主要介绍了java 中Comparable与Comparator详解与比较的相关资料,需要的朋友可以参考下
自己用Java写的桌面小工具,可以用来做为“大家来找茬”之类小游戏时的辅助工具,详见我的博客
java.lang.Comparable和java.util.Comparator是两个容易混淆的接口,两者都带有比较的意思,那么两个接口到底有什么区别,分别在什么情况下使用呢? Comparable Comparable是java.lang包下面的接口,lang包下面可以...