jmu-Java-04面向物件進階--02-介面-Comparator (20 分)
阿新 • • 發佈:2019-01-05
Arrays.sort可以對所有實現Comparable的物件進行排序。但如果有多種排序需求,如有時候需對name進行降序排序,有時候只需要對年齡進行排序。使用Comparable無法滿足這樣的需求。可以編寫不同的Comparator
來滿足多樣的排序需求。
1.編寫PersonSortable2
類
屬性:private name(String)
、private age(int)
有參建構函式:引數為name,age
toString方法:返回格式name-age
2 編寫Comparator類
- 編寫
NameComparator
類,實現對name進行升序排序 - 編寫
AgeComparator
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.*; public class Main{ public static void main(String[] args) { Scanner scan=new Scanner(System.in); int n=scan.nextInt(); PersonSortable2 s[]=new PersonSortable2[n]; for(int i=0;i<n;i++) { String name=scan.next(); int age=scan.nextInt(); s[i]=new PersonSortable2(name,age); } scan.close(); Arrays.sort(s, new NameComparator()); System.out.println("NameComparator:sort"); for(PersonSortable2 i:s) { System.out.println(i); } Arrays.sort(s, new AgeComparator()); System.out.println("AgeComparator:sort"); for(PersonSortable2 i:s) { System.out.println(i.toString()); } System.out.println(Arrays.toString(NameComparator.class.getInterfaces())); System.out.println(Arrays.toString(AgeComparator.class.getInterfaces())); } } class PersonSortable2{ public String name; public int age; public PersonSortable2(String name,int age) { this.name=name; this.age=age; } @Override public String toString() { return name + "-" + age; } } class NameComparator implements Comparator<PersonSortable2>{ @Override public int compare(PersonSortable2 o1, PersonSortable2 o2) { if(o1.name.compareTo(o2.name)>0)return 1; else if(o1.name.compareTo(o2.name)<0)return -1; else return o1.name.compareTo(o2.name); } } class AgeComparator implements Comparator<PersonSortable2>{ @Override public int compare(PersonSortable2 o1, PersonSortable2 o2) { if(o1.age<o2.age)return -1; else return 1; } }