önemi

2012-05-17 21 views
5

Olası Çoğalt:
Java HashMap Default Initial Capacityönemi

Ben java.util.HashMap içinde HashMap uygulanmasını okuyordu. Başlangıç ​​kapasitesi, maksimum kapasite vb. Iki güçtür. java.util.HashMap

/** 
* The default initial capacity - MUST be a power of two. 
*/ 
static final int DEFAULT_INITIAL_CAPACITY = 16; 


/** 
* The maximum capacity, used if a higher value is implicitly specified 
* by either of the constructors with arguments. 
* MUST be a power of two <= 1<<30. 
*/ 
static final int MAXIMUM_CAPACITY = 1 << 30; 


/** 
* The table, resized as necessary. Length MUST Always be a power of two. 
*/ 
transient Entry[] table; 

comments kopyalanan beyanının

Parça boyutları ikisinin bir güç OLMALIDIR düşündürmektedir. İktidarın neden bu kadar önemi var?

+1

Bazı karma tablo türleri, diziye dizin olarak, hesaplanan karma değerin bit deseninden bazı bitleri kullanır. Bu durumda, büyüklük iki iktidarda olmalıdır. HashMap uygulamasının bu şekilde çalıştığı görülmektedir. –

cevap

14

İki güç kullanmak, uygulamayı basitleştirir ve performansını artırır.

E.g. bir karma koddan bir kova bulmak için abs(hash) % SIZE

1

yerine hash & (SIZE -1)'u kullanabilirsiniz. Teorik olarak, listeyi genişletme maliyetini, yalnızca haritadaki öğelerin sayısı arttıkça işlem ihmal edilebilir duruma gelirse, amorti edebiliriz. Yük faktörüne her ulaşıldığında boyutu iki katına çıkarmak, girişlerin genişletilmesini ve yeniden yüklenmesini sağlamanın bir yolu amortismana tabi tutulur.

Özellikle başlangıçta iki gücün gücü olmasının nedeni, bir öğeye sahip olduğumuzda, sonuçtaki tamsayı (32 bit), ilk k-bitlerine kısaltılabilir, burada k, günlüktir (N) N mevcut kapasite.

+1

Her iki nokta da doğrudur, ancak 2. nokta performans açısından göreceli olarak önemsizdir. –

İlgili konular