2017-02-10 3 views
2

Ich habe eine Klasse von Patientenobjekt erstellt, die den Namen und das Geschlecht des Patienten enthält, und ich möchte sie auf Basis des Patientennamens entfernen. Was ist der richtige Weg?Java entfernen Benutzerdefiniertes Objekt aus Baumsatz

Das ist mein Patient Objekt:

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; 
    } 

} 

Das ist meine TreeSet Erklärung: private TreeSet<Patient> ts = new TreeSet<Patient>(new nameComp());

Das ist mein remove-Methode ist (ich weiß nicht, wie ich anfangen soll)

void RemovePatient(String patientName) { 

} 
+2

Iterate durch Ihre TreeSet und finden Sie den mit dem Namen, den Sie möchten. Dann entfernen Sie einfach das Element aus der Menge. – Robert

+1

Erstellen Sie einen Patienten mit diesem Namen und entfernen Sie ihn (vorausgesetzt, der schlecht benannte NameComp ist ein Vergleicher, der nur den Namen der Patienten vergleicht). Methoden beginnen mit einem Kleinbuchstaben; Klassen beginnen mit einem Großbuchstaben. Du machst das Gegenteil. Aber ich habe das Gefühl, dass Sie eigentlich eine Karte wollen. –

+0

Hallo JB Nizet, mein NameComp ist in der Tat mein Komparator, um meinen Baum in aufsteigender Reihenfolge nach dem Patientennamen zu sortieren. Meine Patienten hinzufügen Funktion funktioniert korrekt, aber jetzt bin ich mit der Löschmethode auf den Namen im Parameter angegeben stecken. – user7495150

Antwort

1

Durch einfaches Iterieren und Entfernen wird eine gleichzeitige Änderungsausnahme ausgelöst. Sie könnten Temp das Element speichern und später zu entfernen und entfernen: Zum Beispiel:

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

Nicht, wenn Sie den 'Iterator' manuell (statt einer foreach-Schleife) verwenden und die Methode' remove' aufrufen. – Powerlord

+0

Das stimmt. Immer noch davon ausgehen, dass diese Lösung einfacher ist. – danny

+0

In der Tat verursacht die Verwendung der Iteration eine Ausnahme für die gleichzeitige Modifizierung. Danke Powerlord – user7495150

Verwandte Themen