0017 Java学习笔记-集合-集合一般:HashSet和HashMap

时间:2023-03-10 02:39:54
0017 Java学习笔记-集合-集合一般:HashSet和HashMap

几个概念

  • 桶(bucket):hash表里可以存储元素的位置
  • hash冲突:equals()返回false的不相等对象的hashCode()值相等,意味着一个bucket要放几个元素
  • 容量(capacity):hash表中桶(bucket)的数量
  • 初始化容量(initial capacity):创建一个hash表时的桶的数量,默认是16,可以指定
  • 尺寸(size):当前hash表中记录的数量
  • 负载因子(load factor):负载因子=size/capacity。
  • 负载极限:负载因子所能达到的最大值,默认的负载极限是0.75
  • rehashing:hash表的容量发生变化后,重新分配各元素在hash表中的位置

机制与性能:

  • 同一个bucket里的元素,按链表形式存储
  • 当负载因子达到负载极限时,capacity会自动成倍增加,并重新分配已有元素的存储位置,这会导致性能下降,如果要一次存入大量元素,应指定capacity,防止频繁的rehashing降低性能
  • 负载极限小,占用的内存空间大,能提高数据的查询性能,
  • 负载极限大,占用的内存空间小,但会增加查询数据的时间开销,不只是get,put也需要查询,