Es ist zu betonen, dass die Zahl eine Zweierpotenz ist und keine völlig willkürliche Wahl. Dadurch werden Entwickler, die mit verschiedenen Zahlen experimentieren, dazu gebracht, sie in andere Zahlen im Muster zu ändern (z. B. 1 << 3
oder 1 << 5
anstatt 25
), damit sie den Code nicht beschädigen. Es gibt einen Kommentar direkt darüber :
Die Kapazität von java.util.HashMap
ist immer eine Zweierpotenz. Es ist so konzipiert, weil es die Verwendung einer schnellen bitweisen UND-Operation ermöglicht, um den Hash-Code jedes Schlüssels in den Bereich der Kapazität der Tabelle einzubetten, wie Sie sehen können in Methoden, die auf die Tabelle zugreifen :
Ich kann die Gedanken des Entwicklers nicht lesen, aber wir machen solche Dinge, um eine Beziehung zwischen den Zahlen anzuzeigen.
Vergleiche das:
int day = 86400;
vs
int day = 60 * 60 * 24; // 86400
Das zweite Beispiel zeigt deutlich die Beziehung zwischen den Zahlen und Java ist schlau genug, das als eine Konstante zu kompilieren.
Ich denke, der Grund dafür ist, dass der Entwickler den Wert sehr einfach ändern kann (gemäß JavaDoc '/ * Die Standard-Anfangskapazität - MUSS eine Potenz von Zwei sein. * /') zB in 1 << 5
oder 1 << 3
und er muss keine Berechnungen machen.