Guava semplicemente moltiplica la dimensione passata per 2 (in modo sicuro) e chiama il normale costruttore di hashmap. Ciò lo rende più scarso quindi ci sono meno collisioni durante l'hashing.
La javadoc sul calcolo della capacità indica che calcola un valore per la capacità in modo che l'hashmap sia tra il 25% e il 50% pieno, che è molto lontano dalla soglia che potrebbe innescare un ridimensionamento.
La libreria standard arrotonda la dimensione prevista fino alla potenza più vicina di 2 e la assegna come dimensione, quindi imposta la soglia per il ridimensionamento al 75%. Se avessimo chiesto casualmente delle taglie, la libreria standard si ridimensionerebbe nel 50% dei casi.
Se evitare la soglia sarebbe l'unica considerazione, moltiplicando con 1,34 sarebbe sufficiente disporre di spazio sufficiente per evitare il ridimensionamento sul riempimento con la dimensione prevista degli elementi.
Sembra il tipico rapporto velocità/spazio e gli ingegneri di Google sono più appassionati di velocità e gli ingegneri Sun/Oracle hanno più spazio.
fonte
2015-05-13 16:54:42
La mia risposta copre questo, ma il problema fondamentale qui è che l'API JDK è cattiva perché non dimensiona il 'HashMap'" per contenere un numero specifico di elementi "come ci si aspetterebbe sarebbe. Invece lo dimensiona per contenere il 75% del numero specificato. – ColinD