2014-05-13 20 views
7

Ben documentation meraklı okumak am:Hashmap nasıl bilinir/alınır?

kapasite karma tablosundaki kova sayısıdır ... yük faktörü karma tablo önce almak için izin ne kadar dolu bir ölçüsüdür onun kapasite otomatik olarak artırılır. Karma tablodaki giriş sayısı yük faktörünün ve akım kapasitesinin ürününü aştığında, karma tablosu yeniden düzenlenir (yani, iç veri yapıları yeniden oluşturulur), böylece karma tablonun yaklaşık olarak iki katı kova sayısı vardır.

Anında t hashmap kapasitesini (kova sayısı) bilmek için bir yolu var mı?

+0

gerekir. Yansımadan geçebilirsiniz. Ancak, bir hashmap kapasitesine sahip olmaya gerek yoktur. Boyut, tüm gereksinimleri karşılar. – Sanjeev

cevap

10

Sen Hayır, kullanılamaz yansımayı

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

Bu, 0'a neden olur. Hashmap 16 için başlangıç ​​kapasitesi olarak geri dönüş 16 olmalıdır. –

+1

1.7'de tembelleşti. \t \t'u deneyin HashMap m = yeni HashMap(); \t \t m.put (1, 1); –

+0

Harika Teşekkürler :) Bu, hashmap'a herhangi bir giriş (anahtar, valu) koymazsanız, başlangıç ​​kapasitesi 0 kalır ve varsayılan kapasite 16 değil mi? –

4

online API'a bakarsanız, bunu size söyleyecek herkese açık bir yöntem olmadığını görürsünüz. Her zaman yansıma var ama bunu tavsiye etmem. Her durumda, çoğu durumda kullanmamanız gereken bir uygulama detayı olarak düşünülebilir.

1

HashMap'de böyle bir genel yöntem yoktur.

HashMap.table numaralı telefonu izlemek için IDE'nizde hata ayıklama modunu kullanabilirsiniz.

plus: Sanjeev'in yorumladığı gibi, yansıma bir seçenektir.