hashMap基础知识总结

HashMap是一种基于哈希表的数据结构,由数组加链表组成。它利用哈希桶解决哈希碰撞,数组中的链表越短,性能越好。在JDK7中,碰撞节点过多时查询时间为O(n),JDK8引入红黑树降低查询时间至O(nlogn)。HashMap在负载因子超过0.75时自动扩容,同时,重写equals方法时必须重写hashCode,以确保散列正确。由于HashMap非线程安全,多线程环境下推荐使用ConcurrentHashMap。
摘要由CSDN通过智能技术生成

1. hashmap是由数组加链表组成的,数组是hashmap的哈希桶,链表是为解决哈希碰撞而存在的,如果定位到的数组位置不含链表(即哈希桶中只有一个entry),则对于查找、添加等操作很快在,只有O(1),只需要一次寻址即可(数组根据下标寻址),如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增。对于查找操作来讲,也需要遍历链表,然后通过key对象的equals方法逐一比较查找。所以,就性能考虑,hashmap中的链表越少,则性能越好。即,哈希表的hash值越离散,entry就会尽可能均匀的分布,出现链表的概率就越低。

2. hashMap不会将元素放在链表的尾部,而是放在头部,这是为了避免尾部遍历。

3. hashMap有两个有参构造器可以用来设置initialCapacity和loadFactor的值,即HashMap的初始容量和负载因子的值,如果不传则使用默认值。

4. 在jdk7中,hashMap处理碰撞问题时,都是采用链表来存储,当碰撞的节点很多时,查询的时间是O(n)。

在jdk8中,hashMap处理碰撞问题增加了红黑树这种数据结构,当碰撞节点较少(<8)时,采用链表存储,当碰撞节点较大(>8)时,则采用红黑树(特点是查询时间为O(nlogn))存储。 工作:前面产生冲突的那些key对应的记录只是简单的追加到链表的头部,这些记录只能用遍历来查找,但是超过了阈值后,hashmap

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值