记得当初面试的时候遇见过一道类似这样的题,给出几个学生的成绩和年龄让根据学生的成绩进行排序,如果成绩相同则根据学生的年龄进行排序。当时傻乎乎的不知道咋整,直接根据成绩排了一下序就给输出了,最近看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中提供了两种比较器的实现方式:Comparable(内部比较器)和Comparator(外部比较器)。 第一种方式是Comparable(内部比较器),通过实现Comparable接口,可以使实体类具有比较的能力。Comparable接口支持泛型...
### Java对象比较器详解 在Java编程中,比较对象是一个非常常见的需求,尤其是在排序或查找等操作中。本文将深入探讨一个自定义的Java对象比较器,并解释其工作原理及其实现细节。 #### 1. 概述 给定的代码实现了...
### Java 比较器详解 #### 一、概述 在Java编程中,对对象进行排序是一项常见的需求。为了满足这种需求,Java提供了两种主要的比较接口:`Comparable` 和 `Comparator`。这两种接口允许开发者根据自定义逻辑来确定...
在Java编程语言中,比较器(Comparator)是一个接口,它提供了对对象进行比较的能力,使得我们可以在不修改原始类的情况下自定义排序规则。这在处理集合、数组或泛型对象时非常有用,尤其是在需要定制排序逻辑的情况...
为了简化这个过程,Java提供了一种机制,即“比较器”(Comparator),它允许我们自定义对象的比较规则。本文将深入探讨Java中通用比较类的概念、实现方式以及它们在实际编程中的应用。 1. **比较器接口...
在Java编程语言中,`DynamicComparator`是一种实现比较器(Comparator)的方式,它允许在运行时根据特定条件来比较对象。这种技术对于处理多种比较逻辑或者需要灵活改变比较规则的场景非常有用。本文将深入探讨Java...
在Java编程语言中,Comparable和Comparator接口是两个非常重要的组件,它们主要用来进行对象的比较和排序。了解它们之间的区别对于提升代码的可维护性和灵活性至关重要。 Comparable接口来源于java.lang包,它定义...
Comparable 接口和 Comparator 使用示例 在 Java 编程语言中,比较和排序是非常...Comparable 接口和 Comparator 都是 Java 中非常重要的比较和排序机制,它们提供了不同的比较和排序方式,分别适用于不同的应用场景。
在Java编程语言中,`Comparable`接口扮演着重要的角色,主要用作对象比较和排序的基础。这个接口定义了一个单一的方法`compareTo()`,使得实现了该接口的类的对象可以根据特定的规则进行比较。`Comparable`接口通常...
在 Java 中,比较器可以分为两种:内部比较器(Comparable)和外部比较器(Comparator)。 内部比较器(Comparable) 内部比较器是通过实现 `Comparable` 接口来实现的。该接口只有一个方法 `compareTo`,该方法...
Java 实现 Comparable 接口排序,升序、降序、倒叙 Java 中的 Comparable 接口是一个非常重要的接口,它提供了一种排序的机制,允许开发者自定义对象的排序规则。在 Java 中,实现 Comparable 接口的类可以使用 ...
当一个类实现了Comparable接口,意味着类的实例可以被自然排序,无需额外的比较器。例如,String类就实现了Comparable接口,可以直接进行字符串比较。如果有一个自定义类,如Person1,实现了Comparable接口,那么它...
在 Java 中,Comparator 和 Comparable 是两个非常重要的接口,它们用于对象的排序操作。这两个接口都是在 java.util 包中定义的,主要用于定制排序规则。 **一、Comparator 接口** Comparator 接口允许我们创建...
《EditPlus:强大的Java编程编辑器》 在IT行业中,选择一款高效且功能丰富的文本编辑器对于提升开发效率至关重要。EditPlus就是这样一个备受推崇的工具,尤其在Java开发者群体中,它以其强大的编辑功能和对Java语言...
Java Comparator比较器实例解析 Java Comparator是一种强大的比较器接口,通过实现Comparator接口,可以自定义比较规则,实现对对象的排序和比较。本文将详细介绍Java Comparator比较器实例解析,通过示例代码介绍...
本文将深入探讨Java中三种常见的比较器实现方法:覆写`equals()`方法,实现`Comparable`接口以及继承`Comparator`接口。 1. 覆写`equals()`方法: `equals()`方法是Object类中的一个基础方法,用于判断两个对象...