java

xiaoxiao2021-02-28  93

如果一个类已经开发完成,但是在此类建立的初期并没有实现Comparable接口,此时是无法对该类进行排序操作的。为了解决这样的问题,Java定义了另一个比较器接口comparator接口。接口定义如下:

public interface Comparator<T>{ public int compare(to1,to2); boolean equals(Object obj); }

可以发现此类也存在一个compare方法,同样返回0 -1 1; 与之前不同的是,我们需要专门定义一个比价器规则类才能对数组进行排序。

我们来新建一个学生类,此类包含姓名和年龄两个字段,并且以年龄进行排序:

public class Student2 { private String name; private int 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; } @Override public String toString() { return "Student2{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public boolean equals(Object obj) { if(this == obj){ return true; } if(!(obj instanceof Student2)){ return false; } Student2 stu = (Student2)obj; if(stu.name.equals(this.getName())&& stu.age == this.age){ return true; }else{ return false; } } }

比较器规则类:

public class StudentComparator implements Comparator<Student2> { @Override public int compare(Student2 o1, Student2 o2) { if(o1.equals(o2)){ return 0; }else if(o1.getAge() <o2.getAge()){ return 1; }else { return -1; } } }

测试:

@Test public void test(){ Student2 stu[] = {new Student2("张三",24), new Student2("李四",22), new Student2("王五",19), new Student2("赵七",20), new Student2("孙八",43)}; Arrays.sort(stu,new StudentComparator()); for (Student2 s :stu){ System.out.println(s); } }

结果:

Student2{name=’孙八’, age=43} Student2{name=’张三’, age=24} Student2{name=’李四’, age=22} Student2{name=’赵七’, age=20} Student2{name=’王五’, age=19}

可以看到该对象已经按照年龄从大到小排列起来了。

转载请注明原文地址: https://www.6miu.com/read-85054.html

最新回复(0)