首页 > 编程语言 >每天5道Java面试题(第9天)

每天5道Java面试题(第9天)

时间:2023-11-11 20:32:59浏览次数:44  
标签:面试题 Java HashMap 每天 value 链表 key 红黑树 hash

1. HashMap 和 Hashtable 有什么区别?

存储:HashMap 允许 key 和 value 为 null,而 Hashtable 不允许。

线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。

推荐使用:在

2. 如何决定使用HashMap还是TreeMap?

对于在Map中插入、删除、定位一个元素这类操作,HashMap 是最好的选择,因为相对而言 HashMap 的插入会更快,但如果你要对一个 key 集合进行有序的遍历,那 TreeMap 是更好的选择。

3. 说一下HashMap的实现原理?

HashMap 基于 Hash 算法实现的,我们通过 put(key,value)存储,get(key)来获取。当传入 key 时,HashMap 会根据 key. hashCode() 计算出 hash 值,根据 hash 值将 value 保存在 bucket(桶)里。当计算出的 hash 值相同时,我们称之为 hash 冲突,HashMap 的做法是用链表和红黑树存储相同 hash 值的 value。Java1.8对HashMap做了改进,在链表长度大于8的时候,将后面的数据存在红黑树中,以加快检索速度。后续如果由于删除或者其他原因调整了大小,当红黑树的节点小于或等于

4. 为什么1.8后hashMap要用链表+红黑树的组合呢?

当这个链表过长了,查找这个链表上的元素的时候自然会变慢,所以链表如果过长了会影响到HashMap的性能。

所以在java1.8中,当链表过长时,会将该链表自动转为红黑树,红黑树是一个自平衡二叉树,能够优化查找的性能。

5. 在hashMap中链表什么情况下才会变成红黑树?

把链表转为红黑树、还是选择扩容,看这几个阀值:

①,当链表的长度 大于8,并且entry数组的长度大于64时,才会将链表转为红黑树。

②,当链表的长度小于 6,但是entry数组的长度小于64时,不转为红黑树,而是调用resize方法进行扩容;

标签:面试题,Java,HashMap,每天,value,链表,key,红黑树,hash
From: https://blog.51cto.com/kongxiaolong/8319509

相关文章

  • Java登陆第四天——SQL之DQL(二)
    分页查询现实总是有很多数据,多数情况都需要用分页显示数据。(很多数据显示在一个页面不太现实。)--关键字LIMIT--索引总是从0开始的,页面大小为一页显示多少条数据select列名from表名limit索引,页面大小;栗子:按照user_id降序排列,每页显示3条数据。SQL语句:select*fr......
  • 如何从 javascript 中的 Web api 将 json 对象传递到项目的其余部分
    在将从WebAPI获取的JSON数据传递到项目的其他部分之前,您需要确保在完成fetch请求并获得响应后再进行处理。因为fetch是一个异步操作,需要等待服务器响应的完成才能获取到数据。在您的代码示例中,您可以将json数据传递给其他函数或组件进行后续处理。以下是一种可能的处理方式:fetch(B......
  • 百度地图GL javascript API 如何绘制流动箭头的线?
    要使用百度地图GLJavaScriptAPI绘制流动箭头线,可以使用Polyline和Symbol样式来实现。下面是一个示例代码://创建地图实例varmap=newBMapGL.Map("mapContainer");map.centerAndZoom(newBMapGL.Point(116.404,39.915),11);//创建折线varpoints=[newBMapG......
  • 直播服务器Java(二)
    流媒体服务器:使用像Red5、Wowza、AntMediaServer或者自己基于Java的开源流媒体服务器来处理直播流的传输和分发。实时通信:利用Java的WebSocket或者其他实时通信协议来处理直播中的实时互动,例如弹幕、点赞等。视频编解码:Java本身不太适合处理实时视频编解......
  • Java SPI机制学习之开发实例
    原创/朱季谦在该文章正式开始前,先对JavaSPI是什么做一个简单的介绍。SPI,是ServiceProviderInterface的缩写,即服务提供者接口,它允许开发人员定义一组接口,并由供应方或者第三方提供具体实现。这种机制能够让应用程序动态加载及执行各种接口实现。根据名字来理解,比较抽象,举一......
  • 来世再不选Java!
    危机感距离上一次找工作面试已经过去快2年了,那时候正值疫情肆虐,虽然还未感受到“寒潮来临”的苗头,但最终还是成功通过了几轮面试,顺利签约。在目前公司待了2年了,在大环境的影响下,没有加薪、没有年终(这个真的很伤)、各种项目混乱、技术快停滞不前,年末又要过一年了,又离35进一步了,终危......
  • 来世再不选Java!
    危机感距离上一次找工作面试已经过去快2年了,那时候正值疫情肆虐,虽然还未感受到“寒潮来临”的苗头,但最终还是成功通过了几轮面试,顺利签约。在目前公司待了2年了,在大环境的影响下,没有加薪、没有年终(这个真的很伤)、各种项目混乱、技术快停滞不前,年末又要过一年了,又离35进一步了,终危......
  • java 转 嵌入式 java转嵌入式软件
    java转嵌入式java转嵌入式软件 转载mob64ca14040d222023-10-0718:39:21文章标签java转嵌入式嵌入式移植ARM移植JREjava文章分类Java后端开发阅读数79 前言因公司项目需求,需要在zynq7000平台下运行javaweb程序,所以需要移植java环境。走过的坑:最先的想法......
  • 一个很漂亮的鼠标移动特效,Javascript 脚本,可惜复制到博客园配置适配效果不好
    一个很漂亮的鼠标移动特效,Javascript脚本,可惜复制到博客园配置适配效果不好,暂时记录一下<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>小白教程(json.cn)</title></head><body><script>varStats=function(){var......
  • java开发历史-Java是一种面向对象的编程语言
    Java是一种面向对象的编程语言,由SunMicrosystems于1995年推出。它具有跨平台、安全强大、可移植性强等特点,被广泛应用于企业级Web应用开发、移动应用开发、大数据处理、人工智能等领域。作为一种高级编程语言,Java可以用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序、......