java: Komparator und Treeset Duplikate entfernen

ich habe eine java-Klasse wie folgt

public class A {

    private String field1;
    private String field2;

    //getters, setters but no equals and hashcode
}

sowie eine Liste von Objekten dieser Klasse, ich möchte aus Liste entfernen alle Duplikate Elemente, die den gleichen Feld1 oder der gleichen Feld2, also ich habe 2 Komparatoren

public class Comparator1 implements Comparator<A> {
    public int compare(A o1, A o2) {

        return o1.getField1().compareToIgnoreCase( o2.getField1() );
    }
}

public class Comparator2 implements Comparator<A> {
    public int compare(A o1, A o2) {

        return o1.getField2().compareToIgnoreCase(o2.getField2());
    }
}

damit zu tun, die Aufgabe, die ich verwenden treeset wie

TreeSet<A> ts1 = new TreeSet<A>(new Comparator1())
ts1.addAll(list)

TreeSet<A> ts2 = new TreeSet<A>(new Comparator2())
ts2.addAll(ts1)

list.clear()
list.addAll(ts2)

aber wie kann ich das gleiche tun mit nur einem Komparator und einem treeset ?

Danke für die Hilfe

Update:

Danke an alle für die Antworten, aber nach dem Lesen weiß ich nicht, ob dies der richtige Ansatz für das eigentliche problem.

In meiner realen Fall Feld1 ist wie eine Telefonnummer und Feld2 ist wie ein name.
So will ich nicht zu nennen, die gleiche Telefon-Nummer mehr als einmal (dies ist der erste treeset, entfernt Duplikate) und ich will nicht rufen Sie mehr als einmal mit dem gleichen Namen (die zweite treeset, entfernt Duplikate)

Können Sie die Klasse ändern, aber ich würde gerne wissen, ob diese Vorgehensweise ok ist, zu lösen das eigentliche problem.

Wenn dieser Ansatz richtig ist, bei deiner Frage sehe ich, dass ohne änderung der Klasse nicht möglich ist, die Verwendung von nur einem Komparator

Dank

Hinzufügen equals() und hashCode() zu A ist also nicht eine option? Erweiterung A auch nicht?
ich aktualisierte die Frage

InformationsquelleAutor res1 | 2011-04-09

Schreibe einen Kommentar