2016-07-07 26 views
5

Arkadaşım bana bugün bir röportaj sorusu soruyordu.Hashmap'ta tekrardan kaçınılabilir mi?

Hashmap'ı önlemenin/önlemenin bir yolu var mı? Görüşmeci rehashing

Ben HashMap koduna bakarak çalıştı kaçınılması ve en kısa sürede bir hiç o yük faktörü Ayar

yeniden okunmasını yük faktörü vuran benziyor kurmak için kullanılabilecek bir kanca olduğunu bir ipucu verdi yüksek bir değer sadece rehashing sürecini karıştı tüm birisi bana doğru yönde işaret edebilir Eğer

+0

Başlangıç ​​kapasitesi, yük faktörü tarafından bölünecek maksimum öğe sayısından büyük mü? – immibis

+0

Evet, yük faktörünü ayarlayarak. Ve evet, kaç tane elemanın ekleneceğini bilseyseniz, tamamen kaçınmak mümkündür. –

+6

Sigh ... Potansiyelinin Java çalışma zamanının kaynağını ezberleyip ezberlemediğini test etmek isteyen başka bir görüşmeci ... Bunun gibi soruları sormanın ne anlama geldiğini görmüyorum. – ajb

cevap

5

Evet, olabilir yardımcı olabilir

rehashing engellemek mümkün av de eğer

Am geciktirebilirsiniz Önceden hashmap büyüklüğünü biliyorsanız,

ayarlayın loadFactor = 1

initialCapacity = size of hashmap + 1 (varsayılan değer 16) (varsayılan değer 0.75).

Bu durum (size >= threshold) memnun asla HashMap sınıfından aşağıdaki kod parçacığının çünkü çalışacak senin HashMap

public HashMap(int initialCapacity, float loadFactor) 

örneğini aşağıdaki kurucu kullanın, böylece hashtable resized asla.

void addEntry(int paramInt1, K paramK, V paramV, int paramInt2) 
{ 
    if ((size >= threshold) && (null != table[paramInt2])) 
    { 
     resize(2 * table.length); 
     paramInt1 = null != paramK ? hash(paramK) : 0; 
     paramInt2 = indexFor(paramInt1, table.length); 
    } 
    createEntry(paramInt1, paramK, paramV, paramInt2); 
} 
İlgili konular