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)) {
//
// the following executed only if the object is already in the set
//
Object newobj = modify(obj); // get a modified copy
hashset.add(newobj);
}
6条答案
按热度按时间yeotifhr1#
您可以删除一个元素并添加另一个元素。
当一个对象在哈希集中时修改它是一个灾难的处方(如果修改改变了哈希值或相等行为)。
uemypmqf2#
引用Sun java.util.HashSet的源代码:
既然你花钱买了一张Map,你不妨使用它。
a64a0gku3#
您可以遍历集合以查找对象。
但是,API doc的警告:
“注意:如果使用可变对象作为集合元素,则必须非常小心。如果对象的值以影响等于比较的方式更改,而对象是集合中的元素,则不指定集合的行为。"
h43kikqp4#
tjvv9vkg5#
类似于:
yks3o0rb6#
我遇到了同样的问题,并提出了以下解决方案(它应该实现Set接口,但并非所有方法都在这里)