例項解釋介面、泛型、比較器使用

不設限發表於2011-12-10

提示:

本例子目的是對參加短跑比賽的所有動物進行排名

第一步:所有的動物都應該有一個提供速度的方法

因此直接定義在介面Animal中定義,之後讓每一個

參加比賽的動物都實現這一介面即可


Animal介面:

public interface Animal {
public int speed();
}


參加比賽的所有動物:


豬:

public class Pig implements Animal {
@Override
public int speed() {
return 20;
}
}


狗:

public class Dog implements Animal {
@Override
public int speed() {
// TODO Auto-generated method stub
return 50;
}
}


鷹 :

public class Eagle implements Animal {
@Override
public int speed() {
return 100;
}
}


比賽的規則是比較速度,速度快的在前面,所以

需要定義一個比較器:


排名比較器:


public class Rank<T extends Animal> implements Comparator<T> {
@Override
public int compare(T o1, T o2) {

                //這裡乘以-1是為了倒敘排序
return (o1.speed()-o2.speed())*-1;
}
}


重點在於所有參與排名的動物都是要參加比賽的動物,所有參加比賽的

動物都是要實現Animal介面的,為了讓不同的動物之間可以進行比較,

我們就需要規定可以在比較器裡面進行比較的物件必須要實現Animal的

介面,因為比較器正是呼叫的比較物件的共同方法/屬性進行比較的。


比賽類:

public class Game {
public static void main(String[] args) {
//在它們加入到TreeSet的時候提供了比較的介面
//這樣在它們被加進去的時候就已經排好序了
TreeSet<Animal> ts=new TreeSet<Animal>(new Rank<Animal>());
ts.add(new Dog());
ts.add(new Pig());
ts.add(new Eagle());

Iterator<Animal> it=ts.iterator();
while(it.hasNext()) {
Animal a=it.next();
System.out.println("動物的型別: "+a.getClass().getName()+"\t奔跑速度: "+a.speed());
}
}
}


比賽結果:


public class Game {
public static void main(String[] args) {
//在它們加入到TreeSet的時候提供了比較的介面
//這樣在它們被加進去的時候就已經排好序了
TreeSet<Animal> ts=new TreeSet<Animal>(new Rank<Animal>());
ts.add(new Dog());
//ts.add(new Person());
ts.add(new Pig());
ts.add(new Eagle());

Iterator<Animal> it=ts.iterator();
int rank=1;
while(it.hasNext()) {
Animal a=it.next();
System.out.println("動物的型別: "+a.getClass().getName()+"\t奔跑速度: "+a.speed()+"\t排名第: "+rank);
rank++;
}
}
}


比賽結果:

動物的型別: chapter15.sub5.Pig 奔跑速度: 20        排名第: 1
動物的型別: chapter15.sub5.Dog 奔跑速度: 50        排名第: 2
動物的型別: chapter15.sub5.Eagle 奔跑速度: 100排名第: 3



相關文章