2017-02-10 122 views
2

我創建了一個Patient對象類,其中包含患者姓名和性別,我想根據患者姓名將其刪除。什麼是正確的方法來做到這一點?Java從樹集合中刪除用戶定義的對象

這是我的病人對象:

class Patient { 

    private String name; 
    private int gender; 

    public Patient(String name, int gender){ 
     this.name = name; 
     this.gender = gender; 
    } 

    public String getName(){ 
     return this.name; 
    } 

    public int getGender(){ 
     return this.gender; 
    } 

    public void setName(String name){ 
     this.name = name; 
    } 

    public void setGender(int gender){ 
     this.gender = gender; 
    } 

} 

這是我的TreeSet的聲明:private TreeSet<Patient> ts = new TreeSet<Patient>(new nameComp());

這是我的刪除方法(我不知道如何開始)

void RemovePatient(String patientName) { 

} 
+2

迭代,並找到一個你想要的名稱。然後你只需從集合中刪除元素。 – Robert

+1

使用該名稱創建患者,並將其刪除(假設命名不嚴的nameComp是比較患者姓名的比較器)。方法以小寫開頭;類以大寫字母開頭。你正在做相反的事情。但我有這樣的感覺,你真正想要的是一個Map 。 –

+0

您好JB Nizet,我的nameComp確實是我的比較根據患者姓名按照升序排序我的樹。我的添加Patient功能正常工作,但現在我堅持刪除方法基於參數中給出的名稱。 – user7495150

回答

1

只是在這樣做迭代和刪除時,將導致併發修改異常。你可以臨時保存的項刪除,後來將其刪除: 例如:通過您的TreeSet的

void removePatient(String patientName) { 
    Person deleteThat; 
    for (Patient p : ts){ 
     if(p.getName().equals(patientName){ 
      deleteThat = p; 
     } 
    } 
    if(deleteThat != null){ 
     ts.remove(deleteThat); 
    } 
} 
+1

如果您手動使用'Iterator'(而不是使用foreach循環)並調用它的'remove'方法。 – Powerlord

+0

的確如此。仍然假設這個解決方案更容易。 – danny

+0

確實使用迭代會導致併發修改異常。謝謝Powerlord – user7495150