Java HashMap的initialCapacity到底做什么?

Java HashMap的initialCapacity到底做什么?,java,hashmap,Java,Hashmap,如果我指定HashMap-map=newhashmap(1) 然后,它将只包含一个bucket的HashMap,并且添加到HashMap的所有元素都将保留在该bucket中,无论我的哈希算法有多好?构造函数接受零个、一个或两个参数:初始容量和加载因子。如果超出初始容量,将添加更多铲斗。负载系数确定添加铲斗的时间和数量 请查看以下段落,尤其是以下段落: HashMap实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中的存储桶数,初始容量只是创建哈希表时的容量。负载因子是在自动增加哈希表

如果我指定
HashMap-map=newhashmap(1)

然后,它将只包含一个bucket的
HashMap
,并且添加到
HashMap
的所有元素都将保留在该bucket中,无论我的哈希算法有多好?

构造函数接受零个、一个或两个参数:
初始容量
加载因子
。如果超出初始容量,将添加更多铲斗。负载系数确定添加铲斗的时间和数量

请查看以下段落,尤其是以下段落:

HashMap实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中的存储桶数,初始容量只是创建哈希表时的容量。负载因子是在自动增加哈希表容量之前允许哈希表达到的满度的度量。当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表将被重新格式化(即,重建内部数据结构),以便哈希表的存储桶数大约是存储桶数的两倍

作为一般规则,默认负载系数(.75)在时间和空间成本之间提供了良好的折衷。较高的值会减少空间开销,但会增加查找成本(反映在HashMap类的大多数操作中,包括get和put)。在设置初始容量时,应考虑map中的预期条目数及其负载系数,以尽量减少再灰化操作次数。如果初始容量大于最大入口数除以负载系数,则不会发生再灰化操作


hashMap的大小由两个因素决定:

  • 负荷系数
  • 初始尺寸
  • 荷载系数的默认值为0.75,初始尺寸的默认值为16。这意味着当您使用new hashMap()初始化hashMap时,bucket数组的大小将为16。一旦大小达到16的0.75(即12),hashmap的大小将自动增加

    如果使用HashMap(int var1)初始化HashMap,则加载因子将设置为其默认值(0.75),初始大小将设置为var1

    HashMap也可以使用新的HashMap(intvar1,intvar2)初始化,在这种情况下,大小和加载因子将由开发人员设置。如果您知道要插入到映射中的键值对的数量,那么最好使用这种类型的初始化。如果您没有想法,请使用新的HashMap()


    如果使用用户定义的类作为键,请始终确保覆盖键类中的hashCode和equals方法。这是因为key的hashcode用于从hashmap插入和检索数据。

    您指的是哪种语言/库?您读过javadoc吗?因为它解释了这一点:HashMap的实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中的存储桶数,初始容量只是创建哈希表时的容量。。。