好Day-與比較工作<T>
我的工作中,我已經指令來創建一個命名爲void sortByAthleteNames()
方法,該方法將執行以下任務的任務:
排序列表運動員用名字和姓氏對象。此方法調用在排序類中定義的類型的方法,使用AthleteNameComparator類的對象作爲其第二個參數
排序類具有以下實現:
public class Sorts {
public static void sort(ArrayList<Athlete> objects,Comparator<Athlete> comparator)
{
//TODO
}
}
你的排序方法利用比較方法的參數Comparator對象進行排序。您可以使用選擇排序或插入排序之一。
sortByAthleteNames()方法implemetation:
public void sortByAthleteNames() {
AthleteNameComparator athleteNameComparator = new AthleteNameComparator();
Sorts.sort(athleteList, **CONFUSED WHAT TO PASS HERE**);
}
而AthleteNameComparator類具有以下指令:
的AthleteNameComparator類實現 「比較器」 的接口。 它需要定義以下方法,這是從比較接口繼承的抽象方法:
公衆詮釋比較(第一個對象,對象秒) (請注意,您也可以定義: 公衆詮釋比較(運動員第一,運動員第二) 通過不是使類實現比較
爲此,我已經創建了一個類,這是如下:
AthleteNameComparator
public class AthleteNameComparator implements Comparator<Athlete>{
@Override
public int compare(Athlete o1, Athlete o2) {
// TODO Auto-generated method stub
return 0;
}
}
而且我們有以下的指令,我們需要同樣的方法來實現這一點,那些如下:
如果第一個參數對象有一個姓字典順序比的少第二個參數,返回一個小於零的int值。如果第一個參數對象的姓氏按字典順序大於第二個參數,則返回大於零的int值。如果他們的姓氏相同,則應對他們的名字進行比較。如果他們有相同的名字和姓氏,那麼應該返回0。
我很困惑。我的問題是我如何執行關係運算符,因爲姓氏的datatype
是String
並返回-1/1或0.我已經搜索了很多,根據我的理解,我可以如何比較這些。請確認這是否是正確的方法?
public class AthleteNameComparator{
public int compare(Athlete a1, Athlete a2) {
if(a1.getLastName().hashCode() < a2.getLastName().hashCode())
{
return -1;
}
else if(a1.getLastName().hashCode() > a2.getLastName().hashCode())
{
return 1;
}
else if(a1.getLastName().hashCode() == a2.getLastName().hashCode())
{
if(a1.getFirstName().hashCode() == a2.getFirstName().hashCode())
{
return 0;
}
}
return 100;
}
}
但是又一次爲什麼我們要這樣做?我們可以用-1/1或0來達到什麼目的。你也可以請解釋一下它的後續工作。我需要首先處理哪些事情,以及何時從compare()
方法獲得成功響應,那麼如何使用插入或選擇排序中的返回值。
很多謝謝
不要使用'hashCode'。它不保證字典(或任何)的順序。改爲使用[String.compareTo](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareTo(java.lang.String))。 –
很多很好的信息在這裏:http://stackoverflow.com/questions/369512/how-to-compare-objects-by-multiple-fields – Marichyasana