6-2 jmu-Java-04面向物件進階--02-介面-Comparator (5分)
阿新 • • 發佈:2020-12-16
Arrays.sort可以對所有實現Comparable的物件進行排序。但如果有多種排序需求,如有時候需對name進行降序排序,有時候只需要對年齡進行排序。使用Comparable無法滿足這樣的需求。可以編寫不同的Comparator來滿足多樣的排序需求。
#1.編寫PersonSortable2
類 屬性:private name(String)、private age(int)
有參建構函式:引數為name,age
toString方法:返回格式name-age
#2 編寫Comparator類
編寫NameComparator
類,實現對name進行升序排序
AgeComparator
類,對age進行升序排序#3.main方法中
輸入n
輸入n行name age,並建立n個物件放入陣列
對陣列按照name進行升序排序後輸出。
在3的基礎上對陣列按照age進行升序排序後輸出。
最後最後兩行使用如下程式碼輸出NameComparator與AgeComparator所實現的所有介面。
System.out.println(Arrays.toString(NameComparator.class.getInterfaces()));
System.out.println(Arrays.toString(AgeComparator.class.getInterfaces ()));
輸入樣例:
5
zhang 15
zhang 12
wang 14
Wang 17
li 17
輸出樣例:
NameComparator:sort
Wang-17
li-17
wang-14
zhang-15
zhang-12
AgeComparator:sort
zhang-12
wang-14
zhang-15
Wang-17
li-17
//最後兩行是標識資訊
參考程式碼:
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
class PersonSortable2 {
private String name;
private int age;
public PersonSortable2(String name,int age){
this.name=name;
this.age=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 this.name+"-"+this.age;
}
}
class NameComparator implements Comparator<PersonSortable2>{
public int compare(PersonSortable2 o1,PersonSortable2 o2){
return o1.getName().compareTo(o2.getName());
}
}
class AgeComparator implements Comparator<Object>{
public int compare(Object o1,Object o2){
return ((PersonSortable2)o1).getAge() - ((PersonSortable2)o2).getAge();
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
PersonSortable2 [] P = new PersonSortable2[n];
for(int i = 0;i<n;i++){
P[i] = new PersonSortable2(sc.next(),sc.nextInt());
}
Arrays.sort(P,(new NameComparator()));
System.out.println("NameComparator:sort");
for(int i=0;i<n;i++){
System.out.println(P[i]);
}
Arrays.sort(P,(new AgeComparator()));
System.out.println("AgeComparator:sort");
for(int i=0;i<n;i++){
System.out.println(P[i]);
}
System.out.println(Arrays.toString(NameComparator.class.getInterfaces()));
System.out.println(Arrays.toString(AgeComparator.class.getInterfaces()));
}
}