为什么java.util.HashSet没有get(Object o)方法?
我已经看到了有关Set
根据索引值从中获取对象的其他问题,并且我理解为什么这是不可能的。但是我无法找到一个很好的解释,说明为什么不允许按对象获取,所以我想问一下。
HashSet
有a作为后盾,HashMap
因此从中获取对象应该非常简单。现在看来,我将不得不遍历中的每个项目HashSet
并测试是否相等,这似乎是不必要的。
我可以只使用a,Map
但不需要key:value对,我只需要一个Set
。
例如说我有Foo.java
:
package example;import java.io.Serializable;
public class Foo implements Serializable {
String _id;
String _description;
public Foo(String id){
this._id = id
}
public void setDescription(String description){
this._description = description;
}
public String getDescription(){
return this._description;
}
public boolean equals(Object obj) {
//equals code, checks if id's are equal
}
public int hashCode() {
//hash code calculation
}
}
和Example.java
:
package example;import java.util.HashSet;
public class Example {
public static void main(String[] args){
HashSet<Foo> set = new HashSet<Foo>();
Foo foo1 = new Foo("1");
foo1.setDescription("Number 1");
set.add(foo1);
set.add(new Foo("2"));
//I want to get the object stored in the Set, so I construct a object that is 'equal' to the one I want.
Foo theFoo = set.get(new Foo("1")); //Is there a reason this is not allowed?
System.out.println(theFoo.getDescription); //Should print Number 1
}
}
是否因为equals方法用于测试“绝对”相等而不是“逻辑”相等(在这种情况下contains(Object o)
就足够了)?
回答:
A Set
是被视为重复Collection
对象的对象a.equals(b) == true
,因此尝试获取您已经拥有的相同对象没有任何意义。
如果您尝试get(Object)
从集合中获取,则a Map
可能更合适。
你应该写的是
Map<String, String> map = new LinkedHashMap<>();map.put("1", "Number 1");
map.put("2", null);
String description = map.get("1");
如果对象不在集合中(基于等值),请将其添加(如果对象在集合中(基于等值)),请给我该对象的集合实例
在极少数情况下,您可以使用Map
。
Map<Bar, Bar> map = // LinkedHashMap or ConcurrentHashMapBar bar1 = new Bar(1);
map.put(bar1, bar1);
Bar bar1a = map.get(new Bar(1));
以上是 为什么java.util.HashSet没有get(Object o)方法? 的全部内容, 来源链接: utcz.com/qa/409968.html