`
西北小强
  • 浏览: 342746 次
  • 性别: 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);
		}
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics