Почему 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<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) было бы достаточно)?

Ответы на вопрос(9)

Ваш ответ на вопрос