[Java 11] Comparable 数组排序 之一 与 Comparator 数组排序之二

Comparable
package com.qunar.basicJava.javase.p11CommonlyUsedClass;

import java.util.Arrays;

/**
 * Author: libin.chen@qunar.com  Date: 14-5-21 19:59
 */
class Student implements Comparable<Student> { // 指定泛型类型
    private String name;
    private int age;
    private float score;

    Student(String name, int age, float score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
    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 class ComparableDemo01 {
    public static void main(String[] args) {
        Student stu[] = {new Student("张三", 20, 90.0f), new Student("李四", 22, 90.0f), new Student("王五", 20, 99.0f)};
        Arrays.sort(stu);
        for (int i = 0; i < stu.length; i++) {
            System.out.println(stu[i]);
        }
    }
}

Comparator 数组排序之二,类似于 C/C++ 的方法,在 java 中叫做补救措施

Student 类

package com.qunar.basicJava.javase.p11CommonlyUsedClass.Comparator;

/**
 * Author: libin.chen@qunar.com  Date: 14-5-21 21:32
 */
public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Student)) {
            return false;
        }
        Student stu = (Student)obj;
        if (stu.name.equals(this.name) && stu.age == this.age) {
            return true;
        } else {
            return false;
        }
    }
    public String toString() {
        return name + "\t\t" + age;
    }

    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;
    }
}
StudentComparator 类
package com.qunar.basicJava.javase.p11CommonlyUsedClass.Comparator;

import java.util.Comparator;
/**
 * Author: libin.chen@qunar.com  Date: 14-5-21 21:40
 */
public class StudentComparator implements Comparator<Student> {
    public int compare(Student s1, Student s2) {
        if (s1.equals(s2)) {
            return 0;
        } else if (s1.getAge() < s2.getAge()) {
            return 1;
        } else {
            return -1;
        }
    }
}
ComparatorDemo 主函数,main 例子
package com.qunar.basicJava.javase.p11CommonlyUsedClass.Comparator;

import java.util.Arrays;

/**
 * Author: libin.chen@qunar.com  Date: 14-5-21 21:38
 */
public class ComparatorDemo {
    public static void main(String[] args) {
        Student stu[] = {new Student("张三", 30), new Student("李四", 14), new Student("王五", 18)};
        Arrays.sort(stu, new StudentComparator());
        for (Student student : stu) {
            System.out.println(student);
        }
    }
}



posted @ 2014-06-05 09:51  小尼人00  阅读(167)  评论(0编辑  收藏  举报