¿Por qué java.util.HashSet no tiene un método get (Object o)?

He visto otras preguntas sobre cómo obtener objetos deSetEstá basado en el valor del índice y entiendo por qué eso no es posible. Pero no he podido encontrar una buena explicación de por qué no está permitido obtener un objeto por lo que pensé que lo haría.

HashSet está respaldado por unHashMap así que obtener un objeto de él debería ser bastante sencillo. Tal como está ahora, parece que tendría que iterar sobre cada elemento en elHashSet y prueba de igualdad que parece innecesaria.

Yo podría usar unMap pero no necesito una clave: par de valor, solo necesito unSet.

Por ejemplo digamos que tengoFoo.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
    }

}

yExample.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
    }

}

¿Se debe a que el método equals pretende probar la igualdad "absoluta" en lugar de la igualdad "lógica" (en cuyo casocontains(Object o) sería suficiente)?

Respuestas a la pregunta(9)

Su respuesta a la pregunta