Nell'hashmap Java potrebbero utilizzare diversi modi per farlo. Dalla mia vecchia classe CS 201 Data Structures nel periodo buio:
1) Ogni bucket nella mappa hash può diventare la testa di un elenco collegato tenendo tutte le voci aggiunte che hanno lo stesso valore hash. Una collisione in fase di aggiunta significa che aggiungi la nuova voce alla fine dell'elenco collegato. Ricerca significa che devi controllare in modo lineare tutti quelli presenti in qualsiasi elenco collegato dopo averlo inserito nel secchio.
2) Se si verifica una collisione e lo store è concettualmente un array, è possibile eseguire iterazioni a partire da quel punto fino a trovare un punto vuoto e aggiungere la nuova voce lì. Per la ricerca ciò significa che se si trova il bucket hash, è necessario confrontare linearmente da quel punto al successivo punto vuoto dell'array che supporta la mappa hash.
In entrambi i casi, le prestazioni si riducono se vi sono più voci con lo stesso hash. Nel caso generale, ciò significa che una funzione di hash (utilizzata per generare il codice hash) restituisce un piccolo numero di valori possibili, le prestazioni si ridurranno man mano che la mappa si riempie. Java HashMap ha approfittato di 50 anni di ricerche su queste cose per adattarsi al caso generale di dati generali che si trovano in una mappa con hash.
Nota @dystroy ha fatto un commento sulla regola che non è possibile avere due voci nella mappa con quella corrispondenza in base al metodo equals().
fonte
2013-01-09 17:31:08
Humm ... Prova a leggere il codice sorgente 'HashMap', è un buon esercizio: http://www.docjar.com/html/api/java/util/HashMap.java.html –
Usa un collegamento lista struttura Nessun oggetto 'LinkedList' è stato creato. –