我有一個簡單的類,其中包含一個字符串(名稱)和一個整數(年齡)。應存儲在集合中的對象不得具有雙重名稱值,並應按照年齡下降進行排序。 第一個代碼示例刪除所有的雙名,但不包含第二排序標準:Java比較器:兩個排序標準
public int compare(Person p1, Person p2) {
int reVal = 1;
if(p1.getName().compareTo(p2.getName()) != 0){
reVal = 1;
}
else {
reVal = 0;
}
return reVal;
}
下一個例子比較責令其餘集中的對象的,不包含任何雙名:
public int compare(Person p1, Person p2) {
boolean ageGt = (p1.getAge() > p2.getAge());
int reVal = 1;
if(p1.getName().compareTo(p2.getName()) != 0){
if(scoreGt)
reVal = -1;
else
reVal = 1;
}
else {
reVal = 0;
}
return reVal;
}
第二個比較器正確地根據它們的年齡值命令對象,但它允許雙重名稱,我不明白,因爲如果兩個對象的名稱相同,則已經檢查了外部if語句。爲什麼會發生?
雙重名稱是什麼意思? –
@kocko我認爲他的意思是他不能有兩個同名的對象,所以如果他們有相同的名字,他們被認爲是平等的。 – jazzbassrob
「比較器」不是爲了測試唯一性。如果你想測試名稱的唯一性,你應該使用一個'Map'作爲鍵值和人名。 – fge