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

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

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

您可以删除元素并添加其他元素。

在对象处于哈希集中时修改对象是灾难的处方(如果修改更改了哈希值或相等行为)。

引用Sun java.util.HashSet的股票来源:

public class HashSet extends AbstractSet implements Set, Cloneable, java.io.Serializable { static final long serialVersionUID = -5024744406713321676L; private transient HashMap 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 implements Set{ private HashMap items = new HashMap(); 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); } }