我是HashMaps的新手。任何人都可以告诉我,当有大量密钥时,哈希表是否有效?
答案 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