According to the HashSet javadoc, HashSet.contains only returns a boolean. How can I "find" an object in a hashSet and modify it (it's not a primitive data type)?
I see that HashTable has a get() method, but I would prefer to use the set.
According to the HashSet javadoc, HashSet.contains only returns a boolean. How can I "find" an object in a hashSet and modify it (it's not a primitive data type)?
I see that HashTable has a get() method, but I would prefer to use the set.
You can remove an element and add a different one.
Modifying an object while it is in a hash set is a recipe for disaster (if the modification changes the hash value or equality behavior).
You can iterate through the set to find your object.
A word of warning from the API doc though:
"Note: Great care must be exercised if mutable objects are used as set elements. The behavior of a set is not specified if the value of an object is changed in a manner that affects equals comparisons while the object is an element in the set."
To quote the source of the stock Sun java.util.HashSet:
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
static final long serialVersionUID = -5024744406713321676L;
private transient HashMap<E,Object> map;
So you are paying for a map, you might as well use it.
Object oldobj; //object to modify
if (hashset.remove(oldobj)) {
Object newobj; //modified object
hashset.add(newobj);
}
Something like:
MyObject obj = new MyObject();
HashSet hashSet = new HashSet();
hashSet.add(obj);
if (hashSet.contains(obj) == true) {
hashSet.remove(obj);
obj.setSomething();
hashSet.add(obj);
}