接口的使用范例 对员工信息进行排序
class Person2 { private String name; private int age; private double score; public Person2(String name, int age, double score) { super(); this.name = name; this.age = age; this.score = 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 double getScore() { return score; } public void setScore(double score) { this.score = score; } }
public static void main(String[] args) { Person2[] array = new Person2[3]; array[0] = new Person2("caocao",18,29.0); array[1] = new Person2("liubei",98,19.0); array[2] = new Person2("erke",38,99.99); //想对这个数组进行排序 Arrays.sort(array); System.out.println(Arrays.toString(array));
运行结果出现异常
此时需要重写toString方法,重写时应该给这个类继承一个接口Comparable
抛源码 发现
Compareable:
* public interface Comparable<T> {
* public int compareTo(T o);
* }
需要定义依照什么属性进行排序
class Person2 implements Comparable<Person2>{ private String name; private int age; private double score; public Person2(String name, int age, double score) { //super(); this.name = name; this.age = age; this.score = 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 double getScore() { return score; } public void setScore(double score) { this.score = score; } @Override public String toString() { return "Person2 [name=" + name + ", age=" + age + ", " + "score=" + score + "]"; } //Person2 o待排序的数据 库 public int compareTo(Person2 o){ //return age - o.age; //return name.compareTo(o.name); return (int)(score-o.score); } } public class TestDemo3 { public static void main(String[] args) { Person2[] array = new Person2[3];
array[0] = new Person2("caocao",56,80.0);
array[1] = new Person2("liubei",50,50.0);
array[2] = new Person2("sunquan",38,49.49);
//想对这个数组进行排序
Arrays.sort(array);
System.out.println(Arrays.toString(array));
但是回过头来 实际工作中我们对这个类已经做好了封装,如果想要比较下别的信息会很麻烦
此时引入第二个接口Comparator
它是一个比较器
接口Comparator实现了一个匿名内部类,重写了compare方法
class Person2 { private String name; private int age; private double score; public Person2(String name, int age, double score) { //super(); this.name = name; this.age = age; this.score = 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 double getScore() { return score; } public void setScore(double score) { this.score = score; } @Override public String toString() { return "Person2 [name=" + name + ", age=" + age + ", " + "score=" + score + "]"; }
public class TestDemo3 { public static void main(String[] args) { Person2[] array = new Person2[3]; array[0] = new Person2("caocao",56,80.0); array[1] = new Person2("liubei",50,50.0); array[2] = new Person2("sunquan",38,49.49); //想对数组内的数据年龄进行排序 //Comparator:比较器 类的外部 Arrays.sort(array,new Comparator<Person2>(){ //传入的时候由用户自己选择 //按照用户自己的想法进行排序 @Override public int compare(Person2 p1, Person2 p2) { int age1 = p1.getAge(); int age2 = p2.getAge(); return age1 > age2 ? age1 : (age1 == age2) ? 0:-1; } }); System.out.println(Arrays.toString(array)); /*//分数进行排序 Arrays.sort(array,new Comparator<Person2>(){ //传入的时候由用户自己选择 //按照用户自己的想法进行排序 @Override public int compare(Person2 p1, Person2 p2) { double score1 = p1.getScore(); double score2 = p2.getScore(); return (int)(score1 > score2 ? score1 : (score1 == score2) ? 0:-1); } }); System.out.println(Arrays.toString(array)); } */ } }
浙公网安备 33010602011771号