New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-03-29:HashMap 的实现原理? #16
Comments
这题其实很难,hashmap是一个key value 存储的数据结构 至于红黑树,听说字节跳动面试常问这个问题,一种很复杂的数据结构,我不会 |
讲到HashMap, 我简单描述一下会问到的问题哦: |
什么是红黑树就没几个人会 |
首先说到HashMap,你必须要知道 它是数组加链表构成的。那为什么是呢? |
HashMap 是应用更加广泛的哈希算表实现,行为上与HashTable一致,主要区别在于与HashMap 不是同步的,支持null键和值等.通常情况下,Hashmap进行 put 或get 操作,可以达到常数时间的性能,所以他是绝大部分利用键值对存取场景的首选,比如,实现一个用户ID 和 用户信息对应的运行时存储结构,HashMap 等其他 Map 都扩展了 AbstractMap,这里面包含了通用方法抽象.不同Map的用途,从类图结构就能体现出来,设计已经体现在不同接口上了,大部分使用Map的场景就是放入,访问或者删除,对顺序没有特别的要求,HashMap在这种情况基本上是最好的选择.HashMap的性能表现非常依赖于哈希码的有效性,请务必掌握hashCode和equals的一些基本约定:
|
Java中HashMap底层实现原理(JDK1.8)源码分析 https://blog.csdn.net/tuke_tuke/article/details/51588156 |
HashMap没有synchronized修饰、线程不安全、Key和Value都可以为null 底层实现:数组+链表 1、计算Key的hash值,二次hash然后对数组的长度进行取模,对应到数组的下标 2、如果没有出现hash冲突,则直接创建存入Node数组 3、如果产生hash冲突,先进行equal比较,相同就取代该元素,如果不同,则判断链表高度插入链表,链表高度达到8,并且数组长度达到64,则转变成红黑树,低于64则变回链表; |
No description provided.
The text was updated successfully, but these errors were encountered: