Ciao Mi chiedo se sia possibile accedere direttamente ai contenuti di un HashSet se hai l'Hashcode per l'oggetto che stai cercando, una specie di come usare HashCode come chiave in una HashMap.Accedere a un HashSet utilizzando direttamente HashCode? (Java)
immagino che potrebbe funzionare qualcosa di un po 'come questo:
MyObject object1 = new MyObject(1);
Set<MyObject> MyHashSet = new HashSet<MyObject>();
MyHashSet.add(object1)
int hash = object1.getHashCode
MyObject object2 = MyHashSet[hash]???
Grazie!
modifica: Grazie per le risposte. Ok, capisco che potrei spingere un po 'il contratto di HashSet, ma per questo particolare progetto l'uguaglianza è determinata esclusivamente dall'hashcode e so per certo che ci sarà un solo oggetto per hashcode/hashbucket. La ragione per cui ero piuttosto riluttante a usare una HashMap è perché avrei bisogno di convertire gli oggetti primitivi con cui sto mappando gli oggetti Integer come HashMap prende solo oggetti come chiavi, e sono anche preoccupato che questo possa influenzare le prestazioni. C'è qualcos'altro che potrei fare per implementare qualcosa di simile?
No, non è possibile. Perché vorresti farlo? Sembra che tu voglia una mappa. –
Nessuna API pubblica di questo tipo. E anche se ci fosse, potrebbe restituire oggetti multipli come i codici hash collidono. – Thilo
Non è possibile ottenere l'oggetto in questo modo. Ha senso poiché due oggetti diversi possono avere lo stesso codice hash ma potrebbero non essere uguali. Hashset confronta internamente due oggetti con il metodo equals se il loro hashcode corrisponde. – BatScream