根据HashSet javadoc,HashSet.contains只返回一个布尔值。如何在哈希集中“找到”对象并对其进行修改(它不是原始数据类型)?
我看到HashTable有一个get()方法,但我更喜欢使用该方法。
答案 0 :(得分:12)
您可以删除元素并添加其他元素。
在哈希集中修改对象是灾难的处方(如果修改改变了哈希值或相等行为)。
答案 1 :(得分:12)
引用股票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;
所以你要为地图买单,你也可以使用它。
答案 2 :(得分:2)
答案 3 :(得分:0)
Object oldobj; //object to modify
if (hashset.remove(oldobj)) {
Object newobj; //modified object
hashset.add(newobj);
}
答案 4 :(得分:0)
类似的东西:
MyObject obj = new MyObject();
HashSet hashSet = new HashSet();
hashSet.add(obj);
if (hashSet.contains(obj) == true) {
hashSet.remove(obj);
obj.setSomething();
hashSet.add(obj);
}
答案 5 :(得分:-1)
我遇到了同样的问题并提出了以下解决方案(它应该实现Set接口,但不是所有方法都在这里)
public class MySet<T> implements Set<T>{
private HashMap<T,T> items = new HashMap<T,T>();
public boolean contains(Object item)
{
return items.containsKey(item);
}
public boolean add(T item)
{
if (items.containsKey(item))
return false;
else
{
items.put(item, item);
return true;
}
}
public T get(T item)
{
return items.get(item);
}
}