如何在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); } }