Ho bisogno di una struttura dati Java che possa aggiungere, eliminare e accedere in modo efficiente a un oggetto casuale.Struttura dati Java con aggiunta, eliminazione e random efficienti
Questo è ciò che non funziona:
ArrayList ha efficiente add (costante di tempo), e ad accesso casuale (solo "ottenere" con un numero intero casuale), ma elimina può richiedere tempo lineare, perché deve potenzialmente cerca l'intero elenco per questo.
TreeSet o HashSet ha un'aggiunta ed eliminazione efficiente, ma non riesco a capire come ottenere un oggetto casuale.
Qualche idea?
In teoria, un Albero B funzionerebbe, se potessi attraversare l'albero io stesso con Sinistra o Diritti casuali, ma non penso che una classe Java standard mi dia questa abilità.
Sono disposto ad utilizzare una libreria di terze parti se nulla nelle classi Java standard funzionerà.
Non è necessario supportare duplicati o null, né è necessario essere thread-safe.
Grazie.
'ArrayList.remove (int index)' viene eseguito in tempo costante ammortizzato. Per quanto posso dire, questo significa che le chiamate individuali sono di tempo lineare, ma il tempo medio su una serie di chiamate si avvicina al tempo costante. – Aarowaim
Grazie per questo Aarowaim, ma non saprei l'indice dell'oggetto da rimuovere. Suppongo che potrei memorizzare queste informazioni separatamente in una HashMap o qualcosa del genere, ma non appena ho rimosso un oggetto da ArrayList, gli altri oggetti nella lista cambierebbero gli indici, il che significherebbe che alcuni dei valori nella HashMap sarebbero errati, e mi ci vorrà del tempo lineare per sistemarli. – Magmatic
@Magmatic È necessario consentire elementi duplicati? – Boann