2014-05-13 11 views
7

Sono curioso, ho letto nel documentation:Come sapere/ottenere la capacità di hashmap?

La capacità è il numero dei secchi in tabella hash ... Il fattore di carico è una misura di quanto completa la tabella hash è consentito di ottenere prima della sua la capacità viene aumentata automaticamente. Quando il numero di voci nella tabella hash supera il prodotto del fattore di carico e la capacità corrente, la tabella hash viene rehashed (ovvero, le strutture di dati interne vengono ricostruite) in modo che la tabella hash abbia circa il doppio del numero di bucket.

C'è un modo per conoscere la capacità (numero di bucket) dell'hashmap in un istante t?

+0

No, non è disponibile. Puoi passare attraverso la riflessione però. Ma non deve esserci alcuna necessità di ottenere la capacità di una mappa di hash. La dimensione soddisfa tutti i requisiti – Sanjeev

risposta

10

È necessario riflessione

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

Ciò risulta in 0. Ho verificato in java 1.7. Dovrebbe avere un ritorno 16 come capacità iniziale per hashmap è 16. –

+1

Sembra che sia diventato pigro in 1.7. Prova \t \t HashMap m = new HashMap(); \t \t m.put (1, 1); –

+0

Grazie mille :) Questo significa java 1.7 se non inserisci alcuna voce (chiave, valore) in hashmap, la capacità iniziale rimane 0 e la capacità predefinita non è 16 ?? –

4

Se guardate il online API, vedrete che non ci sono metodi disponibili pubblicamente che ve lo diranno. C'è sempre una riflessione, ma non lo consiglierei.

In ogni caso, questo potrebbe essere considerato un dettaglio di implementazione che non dovresti fare affidamento nella maggior parte dei casi.

1

Nessun metodo pubblico in HashMap.

è possibile utilizzare la modalità di debug nel vostro IDE per guardare HashMap.table.

plus: come commentato da Sanjeev, la riflessione è un'opzione.

Problemi correlati