I am checking if ArrayList contains object:
List propertiesByName = getPropertiesByCategory(propertyCategory);
for(Property p
To use contains
method, you have to override equals()
and hashCode()
methods to achieve this. You can check this answer for implementation https://stackoverflow.com/a/16069158/1320616. Actually contains()
will compare two objects. And to compare two objects you have to implement equals()
method.
Edit : Here are the full details
So when you use contains() what it is doing is
@Override public boolean contains(Object object) {
Object[] a = array;
int s = size;
if (object != null) {
for (int i = 0; i < s; i++) {
if (object.equals(a[i])) {
return true;
}
}
} else {
for (int i = 0; i < s; i++) {
if (a[i] == null) {
return true;
}
}
}
return false;
}
and if you don't implement equals() method in your class it will take the equals()
method from the Object class which is
public boolean equals(Object o) {
return this == o;
}
So now it reduces to == is being used between two objects to compare them. When you put == between two objects, it compares on basis of two things (a) hashcodes of two objects (b) It uses toString()
of the two objects.
Each object has different hashcodes assigned to them. this is the reason why your contains()
is not giving you correct results.