例如,我有一個名為 StudentListA 和 StudentListB 的陣列串列,其中包含許多學生。
StudentListA = {學生 1,學生 2,學生 3....}
StudentListB = {學生 A,學生 B,學生 C....}
在每個學生中,他們都有自己的屬性,例如姓名、地址、gpa 等。我如何比較學生 1 與學生 A 是否具有相同的屬性值等等。
現在我正在考慮這樣的事情:
int i = 0;
for (Student student : StudentListA){
if(student.getName().equals(studentListB.get(i).getName() &&
student.getAddress().equals(studentListB.get(i).getAddress()....){
//Do smtg
}
i ;
}
有沒有更簡單的方法來做到這一點?因為我有很多屬性。我想知道第一個和第二個串列是否有完全相同的學生。
uj5u.com熱心網友回復:
您應該將屬性比較移至Student#equals方法。然后你將Student#equals在回圈中使用:
for (Student student : StudentListA){
if(student.equals(studentListB.get(i))){
//Do smtg
}
i ;
}
您可以查看 Lombock EqualsAndHashCode - 這將是生成 #equals 方法的最簡單方法。
如果您不允許使用 lombock,那么您將不得不Student#equals自己撰寫。
在現實世界中,很少為它撰寫實作,#equals因為 IDE 可以幫助您生成它。例如,這是 Idea 為我生成的:
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
if (this.name != null ? !name.equals(student.name) : student.name != null) return false;
return true;
}
uj5u.com熱心網友回復:
有沒有更簡單的方法來做到這一點?因為我有很多屬性。
Java 本身沒有捷徑可以測驗兩個不同的物件是否所有對應的屬性都相等。但是,您可以撰寫一個執行此類測驗的方法,以便您可以重用它,從而更好地分解您的代碼。您還可以選擇它作為給定型別物件的值相等的定義,方法是使實作該比較的方法覆寫Object.equals().
如果你確實覆寫Object.equals()了,那么一定要覆寫Object.hashcode(),以保持與equals(). 測驗彼此相等的物件應該具有相同的哈希碼,但反過來不一定正確。
uj5u.com熱心網友回復:
- 正如其他帖子中所建議的那樣,關鍵實作是覆寫equals和hashCode,這是必須的。這可以使用 IDE/eclipse 輕松完成代碼生成。
- 實作 java.lang.Comparable 介面
- 覆寫 compareTo 方法
//示例實作,
public int compareTo(Student o){
if (o.hashCode() < this.hashCode()){return -1}
else if(o.hashCode() > this.hashCode()) {return 1}
return 0;
}
使用 Collections.sort 進行排序
現在您有兩個排序串列,您可以使用輕松比較兩個排序串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/463623.html
上一篇:js中的匯入匯出類
