安卓篱笆

标题: 纯干货:给你十分钟看完这个,横扫JAVA面试HashMap题目 [打印本页]

作者: GuiTarvvm2098    时间: 2018-1-2 23:46
标题: 纯干货:给你十分钟看完这个,横扫JAVA面试HashMap题目

Java中数据存储方式最底层的两种结构,一种是数组,另一种就是链表。

数组的特点:连续空间,寻址迅速,但是在删除或者添加元素的时候需要有较大幅度的移动,所以查询速度快,增删较慢。

链表的特点:由于空间不连续,寻址困难,增删元素只需修改指针,所以查询慢、增删快。

HashMap的实现主要用到了哈希表的链地址法。即使用数组+链表的方式实现。

[attach]921[/attach]

java学习群:290256293
2.问题2:HashMap的效率(经常会跟数组与链表比较)

[attach]922[/attach]

3.问题3:HashMap中的key的如果是个Object要实现哪些方法?为什么?

4.问题4:hashMap是线程安全的么?

不是,所以需用使用者加锁处理。hashTable跟concurrentHashMap是线程安全的。因为这个问题,hashMap的效率更高。

5.问题5:什么叫做hash碰撞?

指的是两个不同的key得到同一个hashcode的值。

6.问题6:如果hashCode方法实现的太挫,会发生什么情况?

如果hashCode方法实现不当,hashMap会退化成链表。

7.问题7:treeMap与hashMap的区别?

treeMap的底层是红黑树,hashMap的底层实现是哈希表,两者理论时空复杂度都差不多,在理想情况下,但数据较为稀疏时,应尽量选择hashMap,反之选treemap.(同时也应考虑具体的需求问题,抛开实际问题讨论数据结构没啥意义。)

8.问题8:JDK8是如何解决问题6的问题。

JDK8对hashMap做了优化,当一个散列表里面的元素过多,会将链表转为红黑树。

9.问题9:什么是hashMap的扩容?

如果当表中的75%已经被占用,即视为需要扩容了。不然效率会下降得比较快(毕竟是链表)。扩容的过程为:

这里注意到,扩容是需要遍历整个表的。并且这个过程是非线程安全的。

10.优化

最后给大家推荐一个java内部学习群:290256293,进群找管理免费领取学习资料和视频。没有错就是免费领取!大佬小白都欢迎,大家一起学习共同进步!





欢迎光临 安卓篱笆 (http://www.okapk.cn/) Powered by Discuz! X3.2