`
西北小强
  • 浏览: 343966 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java比较器(Comparable,Compatarator)

    博客分类:
  • Java
阅读更多

记得当初面试的时候遇见过一道类似这样的题,给出几个学生的成绩和年龄让根据学生的成绩进行排序,如果成绩相同则根据学生的年龄进行排序。当时傻乎乎的不知道咋整,直接根据成绩排了一下序就给输出了,最近看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 比较器实例

    Java中的比较器(Comparator)是实现自定义排序的关键工具,它允许我们按照特定逻辑对对象进行排序,而不仅仅是依赖于类的自然顺序。在实际开发中,比较器有着广泛的应用,比如在数据处理、列表排序、集合筛选等方面...

    490.488.JAVA基础教程_常用类-Java比较器概述(490).rar

    Java比较器概述是Java编程中的一个重要概念,尤其在数据排序和集合操作中起着关键作用。这个基础教程可能涵盖了以下几个核心知识点: 1. **Comparable接口**:Java中的`Comparable`接口定义了一个`compareTo()`方法...

    java对象比较器

    ### Java对象比较器详解 在Java编程中,比较对象是一个非常常见的需求,尤其是在排序或查找等操作中。本文将深入探讨一个自定义的Java对象比较器,并解释其工作原理及其实现细节。 #### 1. 概述 给定的代码实现了...

    java比较器.md

    ### Java 比较器详解 #### 一、概述 在Java编程中,对对象进行排序是一项常见的需求。为了满足这种需求,Java提供了两种主要的比较接口:`Comparable` 和 `Comparator`。这两种接口允许开发者根据自定义逻辑来确定...

    详解Java比较器

    详解 Java 比较器 Java 比较器是 Java 语言中的一种机制,用于比较两个对象的大小。 Java 中的对象正常情况下只能进行比较 == 或者 != 不能使用 &gt; ,但是在实际的开发中,我们需要对多个对象进行排序,就是需要比较...

    JAVA_比较器讲解

    在Java编程语言中,比较器(Comparator)是一个接口,它提供了对对象进行比较的能力,使得我们可以在不修改原始类的情况下自定义排序规则。这在处理集合、数组或泛型对象时非常有用,尤其是在需要定制排序逻辑的情况...

    java比较器的常见用法.pdf

    除了`Comparable`接口,Java还提供了一个`Comparator`接口,用于创建自定义比较器。`Comparator`可以用于任何对象的比较,而不仅仅限于实现了`Comparable`接口的对象。通过实现`Comparator`接口的`compare()`方法,...

    java 通用比较类

    为了简化这个过程,Java提供了一种机制,即“比较器”(Comparator),它允许我们自定义对象的比较规则。本文将深入探讨Java中通用比较类的概念、实现方式以及它们在实际编程中的应用。 1. **比较器接口...

    Java中Comparable和Comparator的区别

    在Java编程语言中,Comparable和Comparator接口是两个非常重要的组件,它们主要用来进行对象的比较和排序。了解它们之间的区别对于提升代码的可维护性和灵活性至关重要。 Comparable接口来源于java.lang包,它定义...

    java 自定义类比较器代码

    在 Java 中,比较器可以分为两种:内部比较器(Comparable)和外部比较器(Comparator)。 内部比较器(Comparable) 内部比较器是通过实现 `Comparable` 接口来实现的。该接口只有一个方法 `compareTo`,该方法...

    DynamicComparator:Java 动态比较器

    在Java编程语言中,`DynamicComparator`是一种实现比较器(Comparator)的方式,它允许在运行时根据特定条件来比较对象。这种技术对于处理多种比较逻辑或者需要灵活改变比较规则的场景非常有用。本文将深入探讨Java...

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 03. 复习:Java比较器等.avi

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 03. 复习:Java比较器等.avi

    java 中Comparable与Comparator详解与比较

    当一个类实现了Comparable接口,意味着类的实例可以被自然排序,无需额外的比较器。例如,String类就实现了Comparable接口,可以直接进行字符串比较。如果有一个自定义类,如Person1,实现了Comparable接口,那么它...

    详解Java中Comparable和Comparator接口的区别

    Java 中的 Comparable 和 Comparator 接口都是用于比较和排序的,但是它们之间存在着一些关键的区别。Comparable 是一个排序接口,若一个类实现了 Comparable 接口,就意味着该类支持排序。Comparable 接口仅包含一...

    jar包差异比较器

    总的来说,"jar包差异比较器"是Java开发领域的一款实用工具,通过可视化的方式展示了JAR包间的差异,提高了开发者的工作效率。它强调的是在类级别的细粒度比较,使得在大量代码变动中找到关键的修改变得轻而易举。...

    Comparable与Comparator的区别Java开

    2. **实现方式**:`Comparable`是通过类实现接口,而`Comparator`是在排序时创建和传递一个新的比较器实例。 3. **通用性**:`Comparator`更通用,可以用于任何类型的对象,而`Comparable`通常与特定类绑定。 4. **...

    自己用Java写的图像比较器

    自己用Java写的桌面小工具,可以用来做为“大家来找茬”之类小游戏时的辅助工具,详见我的博客

    文本比较器,jsp文本比较器,方便清晰好用,文本比较

    - JSP(Java Server Pages)文本比较器是专门针对JSP文件进行比较的工具,它能够识别并突出显示JSP文件中的代码差异。 2. **文本比较器的功能**: - **高亮显示差异**:描述中提到的“不同的地方会用不同的颜色...

    Java自然排序Comparable使用方法解析

    Java自然排序Comparable使用方法解析 Java中的自然排序是指使用Comparable接口来实现对象的排序,通过重写compareTo方法来控制排序结果。Comparable接口是Java中的一个接口,用于定义对象的自然顺序。它只有一个...

Global site tag (gtag.js) - Google Analytics