Warum hat java.util.HashSet keine get (Object o) -Methode?

Ich habe andere Fragen zum Abrufen von Objekten gesehenSetbasiert auf dem Indexwert und ich verstehe, warum das nicht möglich ist. Aber ich habe keine gute Erklärung dafür gefunden, warum ein Objekt, an dem ich vorbeikomme, nicht erlaubt ist, also dachte ich, ich würde fragen.

HashSet wird unterstützt von aHashMap Daher sollte es ziemlich einfach sein, ein Objekt daraus zu holen. So wie es jetzt aussieht, müsste ich jeden Punkt in der durchlaufenHashSet und auf Gleichheit prüfen, was unnötig erscheint.

Ich könnte einfach eine verwendenMap aber ich brauche kein Schlüssel: Wert-Paar, ich brauche nur einSet.

Zum Beispiel sage ich habeFoo.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
    }

}

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

}

Liegt es daran, dass mit der Methode equals eher auf "absolute" als auf "logische" Gleichheit geprüft werden soll (in diesem Fall)?contains(Object o) wäre ausreichend)?

Antworten auf die Frage(9)

Ihre Antwort auf die Frage