实例解释接口、泛型、比较器使用

提示:

本例子目的是对参加短跑比赛的所有动物进行排名

第一步:所有的动物都应该有一个提供速度的方法

因此直接定义在接口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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值