突然看到了pta上的题,简单的复习了一下comparator的简单使用
题意答题是这样的:
创建一个Person类,成员为:int age,String name;里面重写起toString()的方法,格式为name-age;
再编写两个Comparator类:
编写
NameComparator
类,实现对name进行升序排序编写
AgeComparator
类,对age进行升序排序然后下面是测试
输入n
输入n行name age,并创建n个对象放入数组
对数组按照name进行升序排序后输出。
对数组按照age进行升序排序后输出。
大体的意思就是这样,也就是要在不改变主类的情况下,通过Comparator接口来实现定制排序
首先先写这两个Comparator的类,只需要重写其比较方法即可,可以写在测试主类的下方
------注意这两个类一定要在主类外面,当初自己放在里面费了一阵功夫才看出来
class NameComparator implements Comparator<Person>{
public int compare(Person p1,Person p2) {
return p1.getName().compareTo(p2.getName());
}
}
class AgeComparator implements Comparator<Person>{
public int compare(Person p1,Person p2) {
return p1.getAge()>p2.getAge()?1:-1;
}
}
-----------这两个类的使用也是在sort里面用的,这个地方老是忘了!---------
测试类就比较好写了
package demo1;
import java.util.*;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Person person[] = new Person[n];
for(int i = 0; i < n; i++) {
String name = sc.next();
int age =sc.nextInt();
Person tmp = new Person(age,name);
person[i] = tmp;
}
System.out.println("name排序:");
Arrays.sort(person,new NameComparator());
for(Person i : person) {
System.out.println(i);
}
System.out.println("age排序:");
Arrays.sort(person,new AgeComparator());
for(Person i : person) {
System.out.println(i);
}
sc.close();
}
}
最后便是最简单的Person类了
package demo1;
public class Person {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(int age,String name) {
this.age = age;
this.name = name;
}
public String toString() {
return this.name+"-"+this.age;
}
}