In una lista di array, il numero efficiente è N (N presuppone già una crescita futura).
Ehm, no, a meno che non fraintenda quello che stai dicendo qui. Quando si passa un numero intero nel costruttore Arraylist, verrà creato un array sottostante di esattamente quella dimensione. Se risulta che hai bisogno anche di un singolo elemento extra, ArrayList dovrà ridimensionare l'array sottostante alla successiva chiamata add(), facendo sì che questa chiamata impieghi molto più tempo del solito.
Se invece stai parlando del tuo valore di N tenendo conto della crescita - allora sì, se puoi garantire che il valore non andrà mai oltre questo, allora è appropriato chiamare un costruttore di Arraylist. E in questo caso, come sottolineato da Hank, il costruttore analogo di una mappa sarebbe N e 1.0f. Questo dovrebbe funzionare ragionevolmente anche se si verifica un superamento di N (anche se si prevede che ciò avvenga su base regolare, si potrebbe desiderare di inserire un numero maggiore per la dimensione iniziale).
Il fattore di carico, nel caso non lo sapessi, è il punto in cui la mappa avrà la sua capacità aumentata, come frazione della capacità totale.
Modifica: Yuval probabilmente ha ragione che è una buona idea lasciare il fattore di carico intorno a 0,75 per una mappa generale. Un fattore di carico di 1.0 si comporterebbe in modo brillante se le tue chiavi avessero hash code sequenziali (come le chiavi in sequenza sequenziali), ma per qualsiasi altra cosa potresti incorrere in collisioni con i bucket hash, il che significa che le ricerche richiedono più tempo per alcuni elementi. La creazione di più bucket di quanto strettamente necessario ridurrà questa possibilità di collisione, il che significa che ci sono più possibilità che gli elementi siano nei propri bucket e quindi siano recuperabili nel più breve tempo possibile. Come dicono i documenti, questo è un compromesso tra tempo e spazio. Se uno dei due è particolarmente importante per te (come mostrato da un profiler piuttosto che ottimizzarlo prematuramente!), Puoi sottolinearlo; in caso contrario, attenersi al valore predefinito.
fonte
2009-01-12 10:18:33
Ho chiesto una [domanda simile] (http://stackoverflow.com/questions/414109/) relativa al dizionario generico .NET di recente. Si potrebbe trovare la discussione interessante anche lì. –
Vedere anche http://stackoverflow.com/questions/7115445/che-è-il-optimal-capacity-and-load-factor-for-a-fixed-size-hashmap – Raedwald