Gleicheit zweier Listen

turmaline

Bekanntes Mitglied
Hallo Leute,

soweit ich weiß die Gleichheit von zweil Listen wird anhand der equals-Methode deren Elemente festgestellt. Allerdings wird die Equals-Methode nicht aufgerufen. So sieht der Code aus:

Feedback

Java:
protected List<Comment> feedbackComments = new ArrayList<Comment>();


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((OBJECT_REF_ID == null) ? 0 : OBJECT_REF_ID.hashCode());
		result = prime * result
				+ ((OBJECT_REF_TYP == null) ? 0 : OBJECT_REF_TYP.hashCode());
		result = prime * result + ((author == null) ? 0 : author.hashCode());
		result = prime * result
				+ ((comments == null) ? 0 : comments.hashCode());
		result = prime * result + ((content == null) ? 0 : content.hashCode());
		result = prime * result + ((created == null) ? 0 : created.hashCode());
		result = prime * result + (deleted ? 1231 : 1237);
		result = prime * result + ((editor == null) ? 0 : editor.hashCode());
		result = prime
				* result
				+ ((feedbackComments == null) ? 0 : feedbackComments.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result
				+ ((modified == null) ? 0 : modified.hashCode());
		result = prime * result
				+ ((ontologyURI == null) ? 0 : ontologyURI.hashCode());
		result = prime * result
				+ ((ontologyVersion == null) ? 0 : ontologyVersion.hashCode());
		result = prime * result + (readyToSync ? 1231 : 1237);
		result = prime * result
				+ ((statusId == null) ? 0 : statusId.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Feedback other = (Feedback) obj;
		if (OBJECT_REF_ID == null) {
			if (other.OBJECT_REF_ID != null)
				return false;
		} else if (!OBJECT_REF_ID.equals(other.OBJECT_REF_ID))
			return false;
		if (OBJECT_REF_TYP == null) {
			if (other.OBJECT_REF_TYP != null)
				return false;
		} else if (!OBJECT_REF_TYP.equals(other.OBJECT_REF_TYP))
			return false;
		if (author == null) {
			if (other.author != null)
				return false;
		} else if (!author.equals(other.author))
			return false;
		if (comments == null) {
			if (other.comments != null)
				return false;
		} else if (!comments.equals(other.comments))
			return false;
		if (content == null) {
			if (other.content != null)
				return false;
		} else if (!content.equals(other.content))
			return false;
		if (created == null) {
			if (other.created != null)
				return false;
		} else if (!created.equals(other.created))
			return false;
		if (deleted != other.deleted)
			return false;
		if (editor == null) {
			if (other.editor != null)
				return false;
		} else if (!editor.equals(other.editor))
			return false;
		if (feedbackComments == null) {
			if (other.feedbackComments != null)
				return false;
		} else if (!feedbackComments.equals(other.feedbackComments))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (modified == null) {
			if (other.modified != null)
				return false;
		} else if (!modified.equals(other.modified))
			return false;
		if (ontologyURI == null) {
			if (other.ontologyURI != null)
				return false;
		} else if (!ontologyURI.equals(other.ontologyURI))
			return false;
		if (ontologyVersion == null) {
			if (other.ontologyVersion != null)
				return false;
		} else if (!ontologyVersion.equals(other.ontologyVersion))
			return false;
		if (readyToSync != other.readyToSync)
			return false;
		if (statusId == null) {
			if (other.statusId != null)
				return false;
		} else if (!statusId.equals(other.statusId))
			return false;
		return true;
	}

Comment-Klasse

Java:
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((attachment == null) ? 0 : attachment.hashCode());
		result = prime * result + ((author == null) ? 0 : author.hashCode());
		result = prime * result + ((created == null) ? 0 : created.hashCode());
		result = prime * result + (createdByEditor ? 1231 : 1237);
		result = prime * result + (read ? 1231 : 1237);
		result = prime * result + ((text == null) ? 0 : text.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Comment other = (Comment) obj;
		if (attachment == null) {
			if (other.attachment != null)
				return false;
		} else if (!attachment.equals(other.attachment))
			return false;
		if (author == null) {
			if (other.author != null)
				return false;
		} else if (!author.equals(other.author))
			return false;
		if (created == null) {
			if (other.created != null)
				return false;
		} else if (!created.equals(other.created))
			return false;
		if (createdByEditor != other.createdByEditor)
			return false;
		if (read != other.read)
			return false;
		if (text == null) {
			if (other.text != null)
				return false;
		} else if (!text.equals(other.text))
			return false;
		return true;
	}

Um festzustellen warum zwei Feedbacks nicht gleich sind habe ich einen break-Point in der Methode Feedback.equals und Comment.equals gesetzt. Allerdings Comment.equals wird nicht aufgerufen.
Warum ist es so? Hat jemand eine Idee?

Gruß,
madlena
 

Marco13

Top Contributor
feedbackComments Wird spät auf gleichheit geprüft. Wenn sich bei ALLEN Elementen z.B. schon das 'attachment' unterscheidet, kommt er gar nicht zum Vergleich von feedbackComments
 

DerEisteeTrinker

Bekanntes Mitglied
Ich würde erstmal ne Methode in einer statischen Hilfsklasse schreiben, die mir das ganze

Java:
if (OBJECT_REF_ID == null) {
    if (other.OBJECT_REF_ID != null)
        return false;
} else if (!OBJECT_REF_ID.equals(other.OBJECT_REF_ID))
    return false;

vereinfacht.

quasi

Java:
public static final boolean compare(Object o1, Object o2) {
	if (o1 == null) {
	    if (o2 != null) {
	        return false;
	    }
	} else if (!o1.equals(o2)) {
	    return false;
	}
	
	return true;
}

spart viel Schreibarbeit.


Zum Thema, wenn er da nicht hinspringt, dann wird eine der Bedingungen vorher null sein.
 
S

SlaterB

Gast
Denkanstoß zu übersichtlichen testbaren Code:

Java:
public class Test {
    public static void main(final String[] args) {
        ArrayList a = new ArrayList();
        a.add(new C());
        ArrayList b = new ArrayList();
        b.add(new D());
        System.out.println(a.equals(b));
    }
}
class C {
    public boolean equals(Object o) {
        System.out.println("C equals with "+o.getClass());
        return false;
    }
}
class D {
    public boolean equals(Object o)  {
        System.out.println("D equals with "+o.getClass());
        return false;
    }
}
 

turmaline

Bekanntes Mitglied
feedbackComments Wird spät auf gleichheit geprüft. Wenn sich bei ALLEN Elementen z.B. schon das 'attachment' unterscheidet, kommt er gar nicht zum Vergleich von feedbackComments

hm.. aber attachment ist das Attribut von Comment und nicht von Feedback, und zur Zeile

Java:
else if (!feedbackComments.equals(other.feedbackComments))
kommt er auf jeden Fall und da muss halt die Comment.equals aufgerufen werden. Soweit ich das verstehe.
 

tfa

Top Contributor
kommt er auf jeden Fall und da muss halt die Comment.equals aufgerufen werden. Soweit ich das verstehe.
Sind denn beide Listen nicht leer und haben die selbe Größe?
Du kannst auch in die equals()-Methode von Arraylist rein debuggen. Dann siehst du sicherlich was passiert.
 

DerEisteeTrinker

Bekanntes Mitglied
dann bau log ausgaben in deine vergleiche ein und schau nach, wo es hängt. In den Logs siehst du ja dann welche Werte unterschiedlich sind und welche null-Werte haben.
 

DerEisteeTrinker

Bekanntes Mitglied
wenn er in eine equals-Methode deiner Meinung nach nicht erreicht *herrgottnocheinmal*, dann liegt es daran, dass er in einem if hängen bleibt. Sprich Ausgaben, Ausgabe und nochmal Ausgaben schreiben und nachschauen was da im Argen liegt. Vllt ist es auch garnicht das equals, sondern das Einlesen bzw. Verarbeiten vorher.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
C Kollision zweier Rechtecke, Schnittpunkte bestimmen Java Basics - Anfänger-Themen 25
C alle möglichen Kombinationen zweier Ziffern auf drei / vier / und 'n" Stellen Java Basics - Anfänger-Themen 11
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
H Gemeinsame Schnittmenge zweier Arrays ausgeben Java Basics - Anfänger-Themen 12
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
K Datentypen Einträge zweier Matrizen vergleichen Java Basics - Anfänger-Themen 4
K Erste Schritte Berechnung der Summe zweier Arrays Java Basics - Anfänger-Themen 15
S Vergleich zweier ArrayLists mit Ausgabe an dritte ArrayList Java Basics - Anfänger-Themen 5
I Schnittpunkt zweier Geraden berechnen Java Basics - Anfänger-Themen 25
G Klassen Vergleich zweier Klassen Java Basics - Anfänger-Themen 23
S Implementieren zweier Klassen Java Basics - Anfänger-Themen 5
P Ungerade Zahlen ausgeben lassen zwischen Spannweite zweier eingegeben zahlen Java Basics - Anfänger-Themen 6
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
N Methoden Methode zum Vergleich zweier Geburtstage Java Basics - Anfänger-Themen 5
K Multiplikation zweier Matrizen Java Basics - Anfänger-Themen 23
D Zusammenfassen zweier Programme Java Basics - Anfänger-Themen 3
B Kreuzprodukt zweier Vektoren (Erste Java Aufgabe - Hilfestellungen und Tips erwünscht) Java Basics - Anfänger-Themen 4
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
N Vergleich zweier String Arrays scheitert Java Basics - Anfänger-Themen 3
C Proportionale Abnahme zweier Werte Java Basics - Anfänger-Themen 4
O ArrayListe sortieren anhand zweier Parameter Java Basics - Anfänger-Themen 4
C Inhalte zweier Vektoren vergleichen Java Basics - Anfänger-Themen 3
T Programm, das die Differenz zweier Daten ausgibt Java Basics - Anfänger-Themen 4
S Ermittlung des GGTs zweier Werte Java Basics - Anfänger-Themen 5
Y Erste Schritte Verknüpfung zweier JAVA-Codes Java Basics - Anfänger-Themen 8
A Methoden Gedanken Anstöße zur Realisierung zweier Ideen (Grafisch Sekunden zählen und Frameaufteilung) Java Basics - Anfänger-Themen 18
I Einlese Abfrage zweier Variablen in einem Fenster Java Basics - Anfänger-Themen 6
A Durchschnitt zweier Mengen berechnen Java Basics - Anfänger-Themen 3
G Kombination zweier Befehle (Preis festlegen & Rabatt berechnen) Java Basics - Anfänger-Themen 3
W Methoden größe zweier tiere vergleichen Java Basics - Anfänger-Themen 15
K Schnitt zweier Ebenen ergibt Gerade Java Basics - Anfänger-Themen 10
L vergleich zweier texte Java Basics - Anfänger-Themen 18
B Vergleich zweier Objekte durch "Hashfunktion" Java Basics - Anfänger-Themen 12
J Addition zweier Zahlen Java Basics - Anfänger-Themen 9
J Dimensionen zweier Arrays vergleichen Java Basics - Anfänger-Themen 4
U Größenvergleich / Dimensionsvergleich zweier Matrizen Java Basics - Anfänger-Themen 2
N Datenaustausch zweier rechner Java Basics - Anfänger-Themen 4
S Print Methode zweier "Classes" kombinieren Java Basics - Anfänger-Themen 2
C Dateiinhalt zweier Dateien auf Gleichheit prüfen Java Basics - Anfänger-Themen 3
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5
W Unterschiede zweier Dateien herauslesen Java Basics - Anfänger-Themen 7
P Unterschiede zweier System.in Varianten Java Basics - Anfänger-Themen 3
I Abhängigkeiten zweier Klassen Java Basics - Anfänger-Themen 25
G Vergleich zweier Arrays Java Basics - Anfänger-Themen 8
D Eine Nachkommazahl zweier Double vergleichen Java Basics - Anfänger-Themen 4
N sortieren zweier abhängiger array listen Java Basics - Anfänger-Themen 12
S Addieren zweier Arrays Java Basics - Anfänger-Themen 10
T ermittlung des minimus zweier eingegebener werte Java Basics - Anfänger-Themen 7
G größere zweier zahlen ermitteln und ausgeben Java Basics - Anfänger-Themen 6
G Summe zweier doubles falsch? Java Basics - Anfänger-Themen 10
I Kollision zweier Rechtecke Java Basics - Anfänger-Themen 9
H Genauigkeit beim Multiplizieren zweier Zahlen Java Basics - Anfänger-Themen 2
K Vergleich zweier Objekte in einer HashMap Java Basics - Anfänger-Themen 6
B Zusammenspiel zweier JFrames Java Basics - Anfänger-Themen 2
A Schnitt zweier Rechtecke ermitteln Java Basics - Anfänger-Themen 2
N Vergleich zweier Elemente verschiedener Vectoren Java Basics - Anfänger-Themen 2
G Vergleich zweier 'long'-Werte. Problem! Java Basics - Anfänger-Themen 6
T Inhalte zweier Variablen tauschen Java Basics - Anfänger-Themen 18
U Maximum zweier Zahlen ermitteln Java Basics - Anfänger-Themen 7
N Den Inhalt zweier Strings (Zahlen) addieren Java Basics - Anfänger-Themen 5
S maximum zweier Zahlen Java Basics - Anfänger-Themen 1
D Listen in Listen in Listen ... ??? Java Basics - Anfänger-Themen 2
XWing listen Java Basics - Anfänger-Themen 7
FunkyPhil94 addLast und addFirst bei Listen Java Basics - Anfänger-Themen 6
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
S Lineare listen verkettung Java Basics - Anfänger-Themen 7
S Listen Java Basics - Anfänger-Themen 12
S Listen , Nodes am ende anängen Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
M Java Listen Java Basics - Anfänger-Themen 4
V einfach verkettete Listen Java Basics - Anfänger-Themen 10
A PhoneBook mit verketteten listen Java Basics - Anfänger-Themen 48
F ich brauche Hilfe bei Listen Java Basics - Anfänger-Themen 13
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
G Java Listen und Iterator Java Basics - Anfänger-Themen 2
S Erklaerung Listen Java Basics - Anfänger-Themen 27
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
L Skip Listen Java Basics - Anfänger-Themen 5
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
L Wie testet man (selbstgeschriebene) Listen sinnvoll? Java Basics - Anfänger-Themen 2
F Problem mit Listen Java Basics - Anfänger-Themen 5
J Listen Operationen Java Basics - Anfänger-Themen 4
O Unterschied Arrays, Listen, Mengen Java Basics - Anfänger-Themen 24
J Eine Liste von Listen erstellen Java Basics - Anfänger-Themen 11
A Sortierte Listen Java Basics - Anfänger-Themen 4
L Datenstrukturen/ Listen Java Basics - Anfänger-Themen 17
A Was könnten typische Prüfungsaufgaben zum Thema lineare, verkettete Listen sein? Java Basics - Anfänger-Themen 5
L Listen und Felder Java Basics - Anfänger-Themen 2
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
R Arrays und Listen Java Basics - Anfänger-Themen 1
R Listen richtig implementieren Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben