Warum 14 statt 16?

7

Der OpenJDK-Code für java.util.HashMap enthält die folgende Zeile:

%Vor%

Warum wird 1 << 4 hier verwendet und nicht 16 ? Ich bin neugierig.

    
Louis 16.03.2016, 15:20
quelle

3 Antworten

17

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 :

%Vor%

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 :

%Vor%     
Boann 16.03.2016, 15:24
quelle
8

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.

    
StackOverflowed 16.03.2016 15:24
quelle
0

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.

    
anstarovoyt 16.03.2016 15:51
quelle

Tags und Links