例項解釋介面、泛型、比較器使用
提示:
本例子目的是對參加短跑比賽的所有動物進行排名
第一步:所有的動物都應該有一個提供速度的方法
因此直接定義在介面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
相關文章
- Go中泛型和反射比較指南Go泛型反射
- Guava鏈式風格Ordering比較器例項Guava
- TypeScript 泛型介面和泛型類TypeScript泛型
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- 介面即泛型泛型
- Java 容器和泛型(3)HashSet,TreeSet 和 LinkedHashSet比較Java泛型
- Java 容器和泛型(2)ArrayList 、LinkedList和Vector比較Java泛型
- Java經典例項:比較浮點數Java
- 集合框架-泛型介面的概述和使用框架泛型
- C#中陣列Array、ArrayList、泛型List<T>的比較C#陣列泛型
- Java Comparable排序介面和Comparator比較器介面Java排序
- Java 泛型 1例Java泛型
- 比較全的oracle事件解釋Oracle事件
- Java & Go 泛型對比JavaGo泛型
- Oracle的 資料型別比較及注意事項Oracle資料型別
- Oracle date 型別比較和String比較Oracle型別
- 收集整理比較全 shell sed 命令與例項教程
- TS系列之介面/類/泛型泛型
- C# 泛型 介面約束C#泛型
- 以MongoDB為例與關係型資料庫比較MongoDB資料庫
- JAVA泛型使用練習2(自定義泛型使用)Java泛型
- Java 介面實現多型 -- 膝上型電腦綜合例項Java多型
- 比較重要的例題
- java介面例項Java
- JAVA中的Comparable介面和自定義比較器Java
- Java 比較器Java
- tcl/tk例項詳解——glob使用例解
- php型別比較表PHP型別
- Java Integer型別比較Java型別
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- TypeScript學習(四)—— 介面和泛型TypeScript泛型
- 使用帶型別判斷的比較判斷型別
- Java中如何使用泛型實現介面中的列表集合?Java泛型
- Java 泛型詳解Java泛型
- Java泛型詳解Java泛型
- 設計模式例項講解 - 介面隔離設計模式
- [Shell] if、for、while流程語句以及整數字符串判斷比較的例項詳解While
- python使用泛型Python泛型