![](/img/trans.png)
[英]How the ArrayList objects are stored inside a HashSet in Java?
[英]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.