记得当初面试的时候遇见过一道类似这样的题,给出几个学生的成绩和年龄让根据学生的成绩进行排序,如果成绩相同则根据学生的年龄进行排序。当时傻乎乎的不知道咋整,直接根据成绩排了一下序就给输出了,最近看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和Comparator接口用于对对象进行比较和排序。这两个接口在很多情况下都能派上用场,但它们的应用场景和实现方式有所不同。 首先,Comparable接口是排序接口,意味着一个类如果实现了...
这个压缩包文件“java文本比较器.rar”很可能包含了一个用于比较Java源代码文件的实用程序。 文本比较器的基本原理是通过算法来分析两个文本文件的每一行或者每一个字符,找出它们之间的不同之处。在Java中,可以...
实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 C 的每一个 e1 和 e2 来说,当且仅当 (e1....
在Java编程语言中,排序是数据处理中一个非常常见的需求,...`Comparator`则是外部比较器,可以动态调整排序规则,适用于各种复杂的排序场景。了解并熟练掌握这两个接口的使用,将有助于提升Java编程中的数据处理能力。
Java中提供了两种比较器的实现方式:Comparable(内部比较器)和Comparator(外部比较器)。 第一种方式是Comparable(内部比较器),通过实现Comparable接口,可以使实体类具有比较的能力。Comparable接口支持泛型...
### Java 比较器详解 #### 一、概述 在Java编程中,对对象进行排序是一项常见的需求。为了满足这种需求,Java提供了两种主要的比较接口:`Comparable` 和 `Comparator`。这两种接口允许开发者根据自定义逻辑来确定...
详解 Java 比较器 Java 比较器是 Java 语言中的一种机制,用于比较两个对象的大小。 Java 中的对象正常情况下只能进行比较 == 或者 != 不能使用 > ,但是在实际的开发中,我们需要对多个对象进行排序,就是需要比较...
在Java编程语言中,比较器(Comparator)是一个接口,它提供了对对象进行比较的能力,使得我们可以在不修改原始类的情况下自定义排序规则。这在处理集合、数组或泛型对象时非常有用,尤其是在需要定制排序逻辑的情况...
在Java编程语言中,Comparable和Comparator接口是两个非常重要的组件,它们主要用来进行对象的比较和排序。了解它们之间的区别对于提升代码的可维护性和灵活性至关重要。 Comparable接口来源于java.lang包,它定义...
Comparable 接口和 Comparator 使用示例 在 Java 编程语言中,比较和排序是非常...Comparable 接口和 Comparator 都是 Java 中非常重要的比较和排序机制,它们提供了不同的比较和排序方式,分别适用于不同的应用场景。
Java 实现 Comparable 接口排序,升序、降序、倒叙 Java 中的 Comparable 接口是一个非常重要的接口,它提供了一种排序的机制,允许开发者自定义对象的排序规则。在 Java 中,实现 Comparable 接口的类可以使用 ...
总的来说,"jar包差异比较器"是Java开发领域的一款实用工具,通过可视化的方式展示了JAR包间的差异,提高了开发者的工作效率。它强调的是在类级别的细粒度比较,使得在大量代码变动中找到关键的修改变得轻而易举。...
《EditPlus:强大的Java编程编辑器》 在IT行业中,选择一款高效且功能丰富的文本编辑器对于提升开发效率至关重要。EditPlus就是这样一个备受推崇的工具,尤其在Java开发者群体中,它以其强大的编辑功能和对Java语言...
本文将深入探讨Java中三种常见的比较器实现方法:覆写`equals()`方法,实现`Comparable`接口以及继承`Comparator`接口。 1. 覆写`equals()`方法: `equals()`方法是Object类中的一个基础方法,用于判断两个对象...
本教程对比了两种广泛应用的面向对象语言——C++和Java,帮助读者深入理解两者之间的异同。 C++是Bjarne Stroustrup于1983年创建的,它是C语言的扩展,增加了类、模板、异常处理等面向对象特性。C++强调性能和灵活...
首先,Comparable接口是Java.lang包中的一个接口,它包含一个方法`compareTo(T o)`,用于比较当前对象与指定对象的大小关系。当类的实例需要在默认的排序顺序下进行比较时,可以实现Comparable接口。例如,String类...
在Java编程语言中,Comparable和Comparator接口都用于比较对象,但它们之间存在一些关键区别,这对于理解和优化代码的可扩展性至关重要。 首先,Comparable接口是一个排序接口,它定义了一个单一的方法`compareTo(T...
Java中的Comparable和Comparator接口在处理数据排序时都扮演着重要角色,但它们有着明显的区别。 **Comparable接口** 是Java基础语言包`java.lang`的一部分,它定义了一个单一的方法`compareTo(T o)`。任何实现了...