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