Согласно HashSet javadoc, HashSet.contains только возвращает булевскую переменную. Как я могу "найти" объект в hashSet и изменить его (это не примитивный тип данных)?
Я вижу, что HashTable имеет получение () метод, но я предпочел бы использовать набор.
Вы можете удалить элемент и добавить другой.
Модификация объекта, когда он находится в хэш-наборе - это рецепт катастрофы (если модификация изменяет хэш-значение или поведение равенства).
Процитируем исходный код стандартного 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;
Итак, вы платите за карту, вы также можете ее использовать.
Object oldobj; //object to modify
if (hashset.remove(oldobj)) {
Object newobj; //modified object
hashset.add(newobj);
}
Примерно:
MyObject obj = new MyObject();
HashSet hashSet = new HashSet();
hashSet.add(obj);
if (hashSet.contains(obj) == true) {
hashSet.remove(obj);
obj.setSomething();
hashSet.add(obj);
}
Вы можете просмотреть набор итерациями, чтобы найти свой объект.
Предупреждение из API doc:
"Примечание: Необходимо проявлять большую осторожность, если в качестве элементов множества используются изменяемые объекты. Поведение множества не определено, если значение объекта изменяется таким образом, что влияет на сравнение равных, пока объект является элементом множества."