2016-07-07 41 views
5

今天我的朋友问我一个面试问题。在hashmap中可以避免重新散列吗?

有没有办法来防止/避免哈希映射?面试官给了一个线索,有一个由它换汤不换药,可避免

我试图寻找到HashMap的代码,一旦它击中它老调重弹

设置客座率客座率到看起来像一个钩子较高的值只能延缓换汤不换药过程

很困惑,如果在所有可能防止换汤不换药

如果有人能在正确的方向指向我,它可以帮助

+0

使初始容量大于将要存储的项目的最大数量除以负载因子? – immibis

+0

是的,通过调整负载系数。是的,只有知道要添加多少个元素才可能完全避免。 –

+6

感叹......另一位想要测试潜在客户是否记住了Java运行时的源头的访问员......我只是没有看到提问这样的问题。 – ajb

回答

5

是的,它可以是AV如果你事先知道你的hashmap的大小,请立即进行补充。

loadFactor = 1(初始值是0.75)

initialCapacity = size of hashmap + 1(默认值是16)。

使用下面的构造函数来实例化的HashMap

public HashMap(int initialCapacity, float loadFactor) 

这将在从HashMap类下面的代码片段,因为工作,条件(size >= threshold)永远不会满足的,所以哈希表永远不会调整。

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); 
}