HashMap 的性能因子

来源:互联网 发布:红五星3d图库永久域名 编辑:程序博客网 时间:2024/06/05 05:06

参考目录:

1. HashMap 散列初体验
2. 为什么HashMap 常用String 对象作key
3. HashMap 原理
4.自定义 hashCode()
5.HashMap 的性能因子

在实际应用中,当HashMap 默认的查找速度与存储速度不能满足我们的需求时,我们可以通过手工调整HashMap 来提高性能,从而满足我们对特定应用的需求。在调整HashMap 之前有一些术语首先让我们共同了解一下。

  • 桶(bucket):表示实际散列表的数组。
  • 容量:表示桶中的位数
  • 初始容量:表在创建时所拥有的桶位数。HashMap 与 HashSet 都允许你在初始化的时候指定初始容量的大小
  • 尺寸:表示当前存储的项数
  • 负载因子:尺寸/容量。空表的负载因子是0,半满表的负载因子是0.5,以此类推。负载轻的表产生冲突的可能性小,因此对于插入和查找都是最理想的状态(但是会减慢使用迭代器遍历的过程)。HashMap 与HashSet 都允许指定负载因子的构造器,表示当负载情况达到该负载因子的水平时,容器将会自动扩容(增加桶位数),实现方式时使容量大致加倍,并重新将现有对象分布到新的桶位集中(这个过程被称为再散列)

       HashMap 使用的默认的负载因子是0.75(也就是当表达到四分之三容量时,就进行散列),这个因子在时间和空间的代价之间达到了平衡。更高的负载因子可以降低表的空间,但是会增加查找代价,这样做是很忌讳的,因为在HashMap 中我们一般做的就是查询与插入操作。

下面是HashMap 的构造函数:

HashMap()
       构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
HashMap(int initialCapacity)
       构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。
HashMap(int initialCapacity, float loadFactor)
       构造一个带指定初始容量和加载因子的空 HashMap。
HashMap(Map<? extends K,? extends V> m)
        构造一个映射关系与指定 Map 相同的新 HashMap。

       在初始化的时候HashMap 允许我们创建指定大小容量与负载因子的map 以满足我们对特定的需求。