如何在java hashset中查找和返回对象

时间:2010-02-20 21:50:13

标签: java object hashtable contains hashset

根据HashSet javadoc,HashSet.contains只返回一个布尔值。如何在哈希集中“找到”对象并对其进行修改(它不是原始数据类型)?

我看到HashTable有一个get()方法,但我更喜欢使用该方法。

6 个答案:

答案 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)

您可以遍历该集以找到您的对象。

来自API doc的警告:

“注意:如果将可变对象用作集合元素,则必须非常小心。如果对象的值以影响等于比较的方式更改,则不指定集合的​​行为,而对象是集合中的元素。“

答案 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);
    }
}