Почему java.util.HashSet не имеет метода get (Object o)?
видел другие вопросы о получении объектов отSet
на основе значения индекса, и я понимаю, почему это невозможно. Но у меня нетЯ не смог найти хорошее объяснение того, почему нельзя получить объект, поэтому подумал, что я спрошу.
HashSet
поддерживаетсяHashMap
поэтому получение объекта от него должно быть довольно простым. Как и сейчас, похоже, мне придется перебирать каждый элемент вHashSet
и проверить на равенство, которое кажется ненужным.
Я мог бы просто использоватьMap
но мне не нужна пара ключ: значение, мне просто нужна.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 set = new HashSet();
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)
было бы достаточно)?