/*
*利用java.util.Array sort()对数组进行排序时,务必保证数组的元素类型实现了Comparable接口(实质上是要保证元素可比)
*否则运行时抛出异常:ClassCastException
*java.util.Array sort()有两种基本的重载形式:
*public static void sort(Object[] a) throws ClassCastException{}
*public static void sort(Object[] a, int fromIndex, int toIndex) throws IllegalArgumentException, ArrayIndexOutOfBoundsException, ClassCastException
*这两种形式对于各种基本数据类型均有重载版本
*还有两种形式,是利用了比较器Comparator接口,还用到了JDK1.5的新概念:泛型
*sort(T[] a, Comparator<? super T> c) throws ClassCastException{}
*sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c) throws IllegalArgumentException, ArrayIndexOutOfBoundsException, ClassCastException
*要保证被排序数组元素对应相应的Comparator接口(可以按照不同的属性进行排序)
*/
//The array to be sorted by the method java.util.Array sort() must implement the Comparable Interface
//Sort.java
package com.msn.spaces.bryantd001;
import java.util.*;
class Player implements Comparable{
private String name;
private int number;
private int ability;
public Player(String name, int number, int ability){
this.name = name;
this.number = number;
this.ability = ability;
}
public String getName(){
return name;
}
public int getNumber(){
return number;
}
public int getAbility(){
return ability;
}
public String toString(){
return "Name: "+name+". Number: "+number+". Ability: "+getAbility()+".";
}
public int compareTo(Object player){
float myAbility = getAbility();
float yourAbility = ((Player)player).getAbility();
return (myAbility < yourAbility ? -1 : (myAbility == yourAbility ? 0 : 1));
}
}
class NameComparator implements Comparator{
public int compare(Object o1, Object o2){
String name1 = ((Player)o1).getName();
String name2 = ((Player)o2).getName();
return name1.compareTo(name2);
}
}
class NumberComparator implements Comparator{
public int compare(Object o1, Object o2){
int number1 = ((Player)o1).getNumber();
int number2 = ((Player)o2).getNumber();
return (number1 < number2 ? -1 : (number1 == number2 ? 0 : 1));
}
}
public class SortPlayer{
static Player[] myPlayers = new Player[]{
new Player("Kobe Bryant", 8, 100),
new Player("Allen Iverson", 3, 99),
new Player("Vince Carter", 15, 90)
};
public static void printInfo(Object[] o){
for (int i = 0; i < o.length; i++){
System.out.println((Player)o[i]);
}
}
public static void main(String[] args){
System.out.println("Before sorting:");
printInfo(myPlayers);
Arrays.sort(myPlayers);
System.out.println("/nAfter sorting by 'Ability':");
printInfo(myPlayers);
Arrays.sort(myPlayers, new NameComparator());
System.out.println("/nAfter sorting by 'Name':");
printInfo(myPlayers);
Arrays.sort(myPlayers, new NumberComparator());
System.out.println("/nAfter sorting by 'Number':");
printInfo(myPlayers);
}
}