[英]Java / HashMap / Performance
這是我的HashMap實現的put()
方法。 100 000個元素的運行時間約為1500毫秒,而Collections
的HashMap的運行時間為8毫秒。
是什么使性能如此巨大的差異?
(我的哈希函數只是基於hashCode(),負載系數約為0.6,因此它應該表現良好)
public boolean put(K key, V value)
{
if (size > cap*LOAD_FACTOR) expand();
int i;
for(i=hash(key);container[i] != null;i=(i+1) % cap)
{
if(container[i].key.equals(key))
{
container[i] = new Entry<K,V>(key,value);
return true;
}
}
container[i] = new Entry<K,V>(key,value);
size++;
return true;
使用%
是非常昂貴的操作,實際上HashMap並沒有全部使用它,即,它的大小始終是2的冪以允許遮罩完成任務。 在您的情況下,單個操作可以調用%
多次,尤其是在您的負載系數不夠高的情況下。 嘗試刪除%
。
注意:如果您像以前一樣使用開放式尋址,則需要降低負載率,例如小於0.5。 HashMap具有更高的負載系數,因為它以不同的方式處理碰撞。
另請注意;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.