HashSet contain Methode funktioniert nicht wie gewollt

Hi,
ich will ein Programm schreiben, in dem ich ein Objekt O in einem Hashset (HashSet set = new Hashset()😉 speicher und ein identisches Objekt O1 erstelle. Ich speichere das Objekt O im Hashset: set.add(O);
Mithilfe von set.contains(Object O1) gucke ich ob das identische Objekt schon exestiert.
Die equals und Hashcode Methode habe ich schon als Objektmethoden von O hinzugefügt. Die beiden Objekte (welche identisch sind) zeigen auch jetzt den gleichen Hashcode an.
Nur leider zeigt die contains Methode noch immer false an! Was mache ich falsch?
 
Zuletzt bearbeitet:
Ok dachte es liegt vielleicht an einem falschen Gedankengang.

Hier der Code
Java:
import java.util.HashSet;
public class Testerklasse{
	private String t;
	private String a;
	private int j;
	
	// Konstruktor
	Testerklasse(String t, String a,int j){
		this.t = t;
		this.a = a;
		this.j = j;
	}
	
	//get Methoden
	public String getT(){
	return this.t;	
	}
	public String getA()){
	return this.a;	
	}
	public int getJ(){
	return this.j;	
	}
	
	//überschriebene equals Methode
	public boolean equals(Testerklasse ebook){
		if(this.t == ebook.getT() && this.a == ebook.getA() && this.j == ebook.getJ())
			return true;
		return false;
	}
	
	//überschriebene hashCode() Methode
	public int hashCode(){
		return (int) (Math.pow(this.getT().hashCode()*31, 3) + Math.pow(this.a.hashCode()*31,2) + Math.pow(this.j *31,1)) ; 
	}
	
	public static void main(String[]args){
		HashSet set = new HashSet();
		Testerklasse eb = new Testerklasse("Test","Tester",123);
		set.add(eb);
		Testerklasse eb1 = new Testerklasse("Test","Tester",123);
		System.out.println(eb1.hashCode());
		System.out.println(eb.hashCode());
		System.out.println(set.contains(eb1));
	
	}
	

	
}
 
Jap das stimmt aufjedenfall!! Leider hilft das nicht bei der Problemlösung. Bekomme noch immer false, obwohl die Objekte identisch sind... Ich probiere mal noch ein bisschen rum!
Muss ich vielleicht die Methode contains auch angleichen? Eigentlich sollte es aber auch ohne gehen!
 
Zuletzt bearbeitet:
Hi,
Da ein Vergleich von Objekten gemacht wrid, muss die equals Methode von Testerklasse auch noch implementiert werden.
in etwa so:
Java:
    @Override
    public boolean equals(Object obj) {
        Testerklasse c = (Testerklasse)obj;
        if(c == null)
            return false;   
        if(!a.equals(c.getA()))
            return false;
        if(!t.equals(c.getT()))
            return false;
        if(j != c.getJ())
            return false;
        return true;
    }
 
Zuletzt bearbeitet:
Also brauche ich 2 überschriebene equals Methoden einmal mit Object als Objekt und einmal mit Testerklasse als Objekt?
Die equals Methode von dir wird nicht für Vergleiche von Instanzen angezogen. Du musst zwingend die equals Methode von Object überschreiben. Sonst wird der Vergleich von Instanzen immer false geben.
Java:
  @Override
public boolean equals(Object obj) {
...
}
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben