当有大量密钥时,哈希表是否有效?

时间:2018-03-30 12:22:20

标签: java hash

我是HashMaps的新手。任何人都可以告诉我,当有大量密钥时,哈希表是否有效?

1 个答案:

答案 0 :(得分:2)

对于HashMap来说,要有效率'地图容量应该大于它所拥有的键号。但更重要的是,密钥必须具有良好散列分布的hashCode方法。

默认情况下,java HashMap的加载因子为0.75,这意味着当你以75%填充它时,它将增加其容量:

来自:https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

  

此实现为基本提供了恒定时间性能   操作(获取和放置),假设散列函数分散了   桶中的元素恰到好处。迭代集合视图   要求时间与容量成比例" HashMap实例的   (桶数)加上其大小(键值的数量   映射)。因此,不设置初始容量非常重要   如果迭代性能是太高(或负载因子太低)   重要的。

     

HashMap的一个实例有两个影响其性能的参数:   初始容量和负载系数。容量是数量   哈希表中的桶,而初始容量就是   创建哈希表时的容量。负载系数是a   衡量哈希表在其之前可以获得多长的度量   容量自动增加。当中的条目数   哈希表超出了加载因子和当前的乘积   容量,哈希表重新哈希(即内部数据   重建结构),以便哈希表大约两次   桶的数量。

但更重要的是与关键对象一起使用的hashCode。 它应该具有良好的(随机)分布等于所有内部索引(桶),否则在较差的情况下,即使作为具有线性搜索的列表,HashMap也可能表现得很差{/ p>。

使用此信息,您可以估算您的表现(基于可用内存和散列密钥分配)

还请查看这篇文章: https://www.linkedin.com/pulse/10-things-java-developer-should-know-hashmap-chinmay-parekh