前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day07】——Java基础篇

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day07】——Java基础篇

作者头像
陶然同学
发布2023-02-24 13:32:09
1710
发布2023-02-24 13:32:09
举报
文章被收录于专栏:陶然同学博客

请你讲一下Java 8的新特性

  • Lambda 表达式 —— Lambda允许把函数作为一个方法的参数(函数作为参数传递到方法中)
  • 方法引用 —— 方法引用提供了非常有用的语法 可以直接引用已有Java类或对象(实例)的方法或构造器 与Lambda联合使用 方法引用可以使语言的构造更紧凑简洁 减少冗余代码
  • 默认方法 —— 默认方法就是在一个接口里面有了一个实现的方法
  • Stream API —— 新添加的Stream API 把真正的函数式编程风格引入到Java中
  • Date Time API —— 加强对日期与时间的处理

请你说说HashMap底层原理

HashMap是以Key-Value方式进行数据存储的一种数据结构 在JDK1.7和1.8底层数据结构不一样

1.7底层数据结构是:数组+链表 使用Entry类存储Key和Value 1.8底层数据结构是:数组+链表+红

黑树 使用Node类存储Key和Value 我们来看看Node类源码:

 每一个节点都会保存自身的hash、key、和value以及下个节点 HashMap示意图:

 HashMap本身的所有位置为null 所以在put操作时 回根据key的hash计算出一个index值 也就是这

个元素将要插入的位置

举个例子:比如 put(“小牛肉”,20),我插入了一个 key 为 “小牛肉” value 为 20 的元素,这个时候

我们会通过哈希函数计算出这个元素将要插入的位置,假设计算出来的结果是 2:

Node类里面定义了一个next属性 那么为什么需要链表?

首先 数组的长度有限 在有限的数组上使用哈希 会造成哈希冲突 很有可能两个元素计算的index是

相同的 那么如何解决Hash冲突?拉链法 就是把hash后值相同放在同一条链表 例如:

当然这里还有一个问题,那就是当 Hash 冲突严重时,在数组上形成的链表会变的越来越长,由于

链表不支持索引,要想在链表中找一个元素就需要遍历一遍链表,那显然效率是比较低的。为此,

JDK 1.8 引入了红黑树当链表的长度大于 8 的时候就会转换为红黑树,不过,在转换之前,会先

去查看 table 数组的长度是否大于 64,如果数组的长度小于 64,那么 HashMap 会优先选择对数

组进行扩容 resize,而不是把链表转换成红黑树。

看下 JDK 1.8 下 HashMap 的完整示意图,应该画的比较清晰了:

请你说说hashCode()和equals()的区别,为什么重写equals()就要重写hashcod()

1.hashCode():获取哈希码 equals():比较两个对象是否相等

2.二者两个约定:如果两个对象相等 他们必须有相同的哈希码 若两个对象的哈希码相同 他们却不

一定相等 也就是说 equal()比较两个对象相等时 hashCode一定相等 hashCode相等的两个对象

equals()不一定相等

3.加分回答:由于hashCode()与equals()具有联动关系 equals()重写时 hashCode()进行重写 使得

这两个方法始终满足相关的约定

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 请你讲一下Java 8的新特性
  • 请你说说HashMap底层原理
  • 请你说说hashCode()和equals()的区别,为什么重写equals()就要重写hashcod()
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档