The code below contains a Set of CustomObjects. I am trying to search an object in it.
I’ve overridden equals() method to match it with a specific field, am not able to understand why is it not able to find it.
“XXtNot FoundtXX”
is getting printed instead of
“Found!!”
import java.util.HashSet; import java.util.Set;
public class TestEquals { private static Set<CustomObject> setCustomObjects; public static void main(String[] args){ setCustomObjects = new HashSet<CustomObject>(); setCustomObjects.add(new CustomObject(2, "asas")); setCustomObjects.add(new CustomObject(3, "gdhdf")); setCustomObjects.add(new CustomObject(4, "bnbv")); setCustomObjects.add(new CustomObject(5, "ljhj")); AnotherObject anObj = new AnotherObject(3, 4); if(setCustomObjects.contains(anObj)){ System.out.println("Found!!"); }else{ System.out.println("XXtNot FoundtXX"); } } } class CustomObject { public CustomObject(int test, String name) { this.test = test; this.name = name; } private int test; private String name; @Override public boolean equals(Object obj) { if(obj instanceof AnotherObject){ AnotherObject temp = (AnotherObject)obj; System.out.println("test" + temp.getOtherTest()); return this.test == temp.getOtherTest(); } return true; } @Override public int hashCode() { int hash = 22; hash = 32 * hash + this.test; return hash; } } class AnotherObject { public AnotherObject(int otherTest, double test2) { this.otherTest = otherTest; this.test2 = test2; } private int otherTest; private double test2; public int getOtherTest() { return otherTest; } public void setOtherTest(int otherTest) { this.otherTest = otherTest; } }
Advertisement
Answer
You haven’t overridden equals
and hashCode
in AnotherObject
. Do this and you should get what you’re expecting.