2017-02-10 36 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