关注
HashMap是一个散列桶(数组和链表),它存储的内容是键值对key-value映射
HashMap采用了数组和链表的数据结构,能在查询和修改方面继承了数组的线性查询和链表的寻址修改
HashMap是非synchronized的,线程不安全,所以很快
HashMap可以接受null键和值,而HashTable不行(因为equals()方法需要对象,因为HashMap是后出的api经过处理才可以)
· HashMap的工作原理是什么?
然后讲下HashMap中的实现原理,hashmap是由数组和链表组成的。数组是HashMap的本体,而链表则是为了解决hash冲突而存在的,如果定位到数组位置不存在链表(当前Entry的next指向为null),那么对于查找插入等操作很快,仅仅需要一次寻址即可;如果定位到数组有链表,对于添加操作其时间复杂度为O(n),首先遍历链表,存在既覆盖,否则新增。对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。
· 减少hash冲突?扰动函数可以减少碰撞
原理是如果两个不相等的对象返回不同的 hashcode 的话,那么碰撞的几率就会小些。这就意味着存链表结构减小,这样取值的话就不会频繁调用 equal 方法,从而提高 HashMap 的性能(扰动即 Hash 方法内部的算法实现,目的是让不同对象返回不同hashcode)。
使用不可变的、声明作 final 对象,并且采用合适的 equals() 和 hashCode() 方法,将会减少碰撞的发生不可变性使得能够缓存不同键的 hashcode,这将提高整个获取对象的速度,使用 String、Integer 这样的 wrapper 类作为键是非常好的选择。
查看原帖
3 1
相关推荐
投递网易等公司8个岗位 >
点赞 评论 收藏
转发
不愿透露姓名的神秘牛友
05-24 15:06
点赞 评论 收藏
转发
牛客热帖
正在热议
# 牛客帮帮团来啦!有问必答 #
1143277次浏览 17079人参与
# 去年你投递实习了吗? #
8213次浏览 141人参与
# 不去互联网可以去金融科技 #
17995次浏览 236人参与
# 和牛牛一起刷题打卡 #
18216次浏览 1600人参与
# 通信和硬件还有转码的必要吗 #
10915次浏览 101人参与
# 实习与准备秋招该如何平衡 #
202496次浏览 3612人参与
# OPPO开奖 #
18341次浏览 255人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4342次浏览 28人参与
# 通信硬件薪资爆料 #
264899次浏览 2476人参与
# 简历无回复,你会继续海投还是优化再投? #
24891次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
453981次浏览 5119人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14518次浏览 349人参与
# 互联网公司评价 #
97273次浏览 1269人参与
# 国企是理工四大天坑的最好选择吗 #
2048次浏览 34人参与
# 硬件人的简历怎么写 #
82218次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19312次浏览 212人参与
# 你见过最离谱的招聘要求是什么? #
26431次浏览 239人参与
# 学历对求职的影响 #
160841次浏览 1803人参与
# 你收到了团子的OC了吗 #
537735次浏览 6382人参与
# 你已经投递多少份简历了 #
343436次浏览 4959人参与
# 实习生应该准时下班吗 #
96563次浏览 721人参与
# 工作两年想退休了 #
20764次浏览 271人参与