как найти и эхо-сигналы в Java hashset

Согласно HashSet javadoc, HashSet.contains только возвращает булевскую переменную. Как я могу "найти" объект в hashSet и изменить его (это не примитивный тип данных)?

Я вижу, что HashTable имеет получение () метод, но я предпочел бы использовать набор.

12
задан user276712 20 February 2010 в 21:50
поделиться

5 ответов

Вы можете удалить элемент и добавить другой.

Модификация объекта, когда он находится в хэш-наборе - это рецепт катастрофы (если модификация изменяет хэш-значение или поведение равенства).

12
ответ дан 2 December 2019 в 06:08
поделиться

Процитируем исходный код стандартного 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;

Итак, вы платите за карту, вы также можете ее использовать.

12
ответ дан 2 December 2019 в 06:08
поделиться
Object oldobj; //object to modify
if (hashset.remove(oldobj)) {
   Object newobj; //modified object
   hashset.add(newobj);
}
0
ответ дан 2 December 2019 в 06:08
поделиться

Примерно:

MyObject obj = new MyObject();
HashSet hashSet = new HashSet();
hashSet.add(obj);

if (hashSet.contains(obj) == true) {
    hashSet.remove(obj);
    obj.setSomething();
    hashSet.add(obj);
}
0
ответ дан 2 December 2019 в 06:08
поделиться

Вы можете просмотреть набор итерациями, чтобы найти свой объект.

Предупреждение из API doc:

"Примечание: Необходимо проявлять большую осторожность, если в качестве элементов множества используются изменяемые объекты. Поведение множества не определено, если значение объекта изменяется таким образом, что влияет на сравнение равных, пока объект является элементом множества."

2
ответ дан 2 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: