Java-比较器(ComparableComparator)
Posted u013063153
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-比较器(ComparableComparator)相关的知识,希望对你有一定的参考价值。
原文:http://blog.csdn.net/itmyhome1990/article/details/8952722
Comparable接口的作用
之前Arrays类中存在sort()方法,此方法可以直接对对象数组进行排序。
Comparable接口
可以直接使用java.util.Arrays类进行数组的排序操作,但对象所在的类必须实现Comparable接口,用于指定排序接口。
Comparable接口的定义如下:
public interface Comparable<T>
public int compareTo(T o);
此方法返回一个int类型的数据,但是此int的值只能是一下三种:
1:表示大于
-1:表示小于
0:表示相等
要求:定义一个学生类,里面有姓名,年龄,成绩三个属性,要求按成绩由高到低排序,如果成绩相等,则按照年龄由低到高排序。
[java] view plain copy- package com.itmyhome;
- import java.util.Arrays;
- 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;
- @Override
- public int compareTo(Student stu) //覆写compareTo方法实现排序规则的应用
- 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;
- public String toString()
- return "姓名:"+this.name+", 年龄:"+this.age+", 成绩:"+this.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;
- public class T
- public static void main(String[] args) throws Exception
- Student stu[] = new Student("张三",22,80f)
- ,new Student("李四",23,83f)
- ,new Student("王五",21,80f);
- Arrays.sort(stu); //进行排序操作
- for (int i = 0; i < stu.length; i++)
- Student s = stu[i];
- System.out.println(s);
分析比较器的排序原理
实际上比较器的操作,就是经常听到的二叉树的排序算法。
排序的基本原理:使用第一个元素作为根节点,之后如果后面的内容比根节点小,则放在左子树,如果内容比根节点的内容要大,则放在右子树。
[java] view plain copy- package com.itmyhome;
- class BinaryTree
- class Node // 声明一个节点类
- private Comparable data; // 保存具体的内容
- Java比较器