簡體   English   中英

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

[英]how to find and return objects in java hashset

根據HashSet javadoc,HashSet.contains只返回一個布爾值。 如何在hashSet中“查找”對象並對其進行修改(它不是原始數據類型)?

我看到HashTable有一個get()方法,但我更喜歡使用該方法。

您可以刪除元素並添加其他元素。

在對象處於哈希集中時修改對象是災難的處方(如果修改更改了哈希值或相等行為)。

引用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;

所以你要為地圖買單,你也可以使用它。

您可以遍歷該集以查找對象。

盡管如此,來自API doc的警告:

“注意:如果可變對象用作集合元素,則必須非常小心。如果對象的值以影響等於比較的方式更改而對象是集合中的元素,則不會指定集合的​​行為。 “

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

我遇到了同樣的問題,並提出了以下解決方案(它應該實現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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM