Ecco la mia situazione. Sto usando due java.util.HashMap per memorizzare alcuni dati utilizzati di frequente in un'app Web Java in esecuzione su Tomcat. Conosco il numero esatto di voci in ogni Hashmap. Le chiavi saranno rispettivamente stringhe e int.Prestazioni di HashMap con diversa capacità iniziale e fattore di carico
La mia domanda è, qual è il modo migliore per impostare la capacità iniziale e il load factor?
Devo impostare la capacità uguale al numero di elementi che avrà e la capacità di carico a 1.0? Mi piacerebbe la migliore performance assoluta senza usare troppa memoria. Tuttavia, temo che il tavolo non si riempia in modo ottimale. Con una tabella delle dimensioni esatte necessarie, non ci sarà la collisione tra le chiavi, causando una scansione (solitamente breve) per trovare l'elemento corretto?
Assumendo (e questo è un allungamento) che la funzione di hash è un semplice mod 5 dei tasti interi, non significherebbe che i tasti 5, 10, 15 colpiranno lo stesso bucket e quindi causeranno un tentativo di riempimento i secchi accanto a loro? Una maggiore capacità iniziale aumenterebbe le prestazioni?
Inoltre, se c'è una migliore infrastruttura di una hashmap per questo, sono completamente aperto anche a questo.
Quante voci sono nella mappa e qual è la lunghezza media della chiave stringa? – Avi
le voci totali saranno comprese tra 20 e 50 e la lunghezza della chiave di stringa avrà un numero di caratteri compreso tra 10-30 –
Che è piuttosto piccola, sei sicuro di aver bisogno di preoccuparti? A meno che tu non abbia molti esempi, vai con i parametri HashMap predefiniti. – starblue