La parola chiave 'capacità' non è corretto, per definizione, e non viene utilizzato nel modo tipicamente previsto.
Per impostazione predefinita, il "fattore di carico" di una HashMap è 0,75, ciò significa che quando il numero di voci in una HashMap raggiunge il 75% della capacità fornita, ridimensionerà l'array e il rehash.
Per esempio, se faccio:
Map<Integer, Integer> map = new HashMap<>(100);
Quando sto aggiungendo la voce 75 °, la mappa sarà ridimensionare la tabella Ingresso 2 * map.size() (o 2 * table.length). Così possiamo fare un paio di cose:
- Cambiare il fattore di carico - questo potrebbe influire sulle prestazioni della mappa
- Impostare la capacità iniziale di list.size()/0,75 + 1
l'opzione migliore è il secondo dei due, vorrei spiegare che cosa sta succedendo qui:
list.size()/0.75
Questa list.size tornerà() + 25% di list.size(), per esempio se la mia lista ha avuto un dimensione di 100 restituirebbe 133. Noi quindi aggiungi 1 ad esso mentre la mappa viene ridimensionata se la sua dimensione è pari al 75% della capacità iniziale, quindi se avessimo una lista con una dimensione di 100, imposteremo la capacità iniziale a 134, questo significherebbe che l'aggiunta di tutte le 100 voci dalla lista non comporterebbe alcun ridimensionamento della mappa.
Risultato finale:
Map<Integer, Integer> map = new HashMap<>(list.size()/0.75 + 1);
fonte
2015-02-25 00:03:07
mi raccomando: 1) dichiarare la variabile come 'Map' invece di' HashMap', 2) Lasciare questo tipo di problemi alla JVM, se si nota ** con un profiler ** che sta dando i risultati della tua performance, quindi inizia a valutarlo. –
@LuiggiMendoza generalmente sì, d'accordo, ma questo è un caso d'uso così comune che potremmo anche eliminare le ridimensionazioni – Eugene