2014-05-13 8 views
7

ich neugierig bin, lese ich in der documentation:Wie kann ich die Kapazität von hashmap erkennen/bekommen?

Die Kapazität die Anzahl der Schaufeln in der Hash-Tabelle ist ... Der Auslastungsfaktor ist ein Maß dafür, wie voll die Hash-Tabelle, bevor bekommen darf seine Die Kapazität wird automatisch erhöht. Wenn die Anzahl der Einträge in der Hash-Tabelle das Produkt aus dem Ladefaktor und der aktuellen Kapazität überschreitet, wird die Hash-Tabelle erneut erstellt (dh interne Datenstrukturen werden neu erstellt), sodass die Hash-Tabelle ungefähr die doppelte Anzahl an Buckets aufweist.

Gibt es eine Möglichkeit, die Kapazität (Anzahl der Buckets) des Hashmaps zu einem Zeitpunkt t zu kennen?

+0

Nein, es ist nicht verfügbar. Sie können jedoch durch Reflexion gehen. Aber es muss nicht nötig sein, die Kapazität einer Hashmappe zu bekommen. Größe erfüllt alle Anforderungen – Sanjeev

Antwort

10

Sie benötigen Reflexion

HashMap m = new HashMap(); 
Field tableField = HashMap.class.getDeclaredField("table"); 
tableField.setAccessible(true); 
Object[] table = (Object[]) tableField.get(m); 
System.out.println(table == null ? 0 : table.length); 
+0

Dies ergibt sich zu 0. Ich testete in Java 1.7. Es sollte 16 als Anfangskapazität für hashmap 16 haben. –

+1

Es scheint, dass es in 1.7 faul wurde. Versuchen Sie \t \t HashMap m = neue HashMap(); \t \t m.put (1, 1); –

+0

Toller Dank :) Bedeutet dies, dass Java 1.7 weitergeht, wenn Sie keinen Eintrag (Schlüssel, Wert) in hashmap setzen, bleibt die Anfangskapazität 0 und die Standardkapazität ist nicht 16 ?? –

4

Wenn Sie sich die online API ansehen, werden Sie feststellen, dass es keine öffentlich verfügbaren Methoden gibt, die Ihnen das sagen. Es gibt immer Überlegungen, aber ich würde das nicht empfehlen.

In jedem Fall könnte dies als Implementierungsdetail betrachtet werden, auf das Sie sich in den meisten Fällen nicht verlassen sollten.

1

Keine solche öffentliche Methode in HashMap.

Sie könnten Debug-Modus in Ihrer IDE verwenden, um HashMap.table zu sehen.

plus: wie Sanjeev kommentierte, ist Reflexion eine Option.

Verwandte Themen