HashMap原理以及如何解决冲突问题

面试时最经典也是最喜欢问的集合是HashMap了

1:先说一下HashMap的数据结构:

     HashMap是一个哈希表,其底层可以说是数组加链表结构:看图直观明了

   

 

HashMap的默认容量是16,当到达16时,HashMap会根据负载因子(默认0.75)和扩容规则,增加容量的  具体请看

https://www.cnblogs.com/chengxiao/p/6059914.html

---------------------------------------------------------------------------这是一条分割线----------------------------------------------------------------------

在说一下ArrayList底层数数组结构,如何根据索引来查找数组的时间复杂度为O(1),但是操作如果需要遍历的话,时间复杂度为O(n),

而且增删对于数组结构的消耗很大,也就是性能比较次,因为ArrayList每次新增或者删除都相当于新开辟一个数组内存,然后再copy原来的,再加上新增的,删除也是相同的,需要先copy到新的数组中,这样操作时间和消耗都是很大的。所以查询快

但是LinkedList不是的,LinkeList是查询相比较ArrayList慢一点,但是新增和删除快效率高,之所以查询慢,是因为LinkedList是链表结构,获取某个元素都是需要遍历的。但是查询的时间复杂度是O(n) ,

看下图对比:时间复杂度,需要遍历的操作则复杂度为O(1)

--------------------------------------------------更新---------------------------

如果hashcode一致,但是equals不一样,后来的加在链表的表头,注意确实是加在表头位置

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值