亚博游戏-亚博电子游戏官网亚博游戏-亚博电子游戏官网

官方视频
亚博游戏登入- 【Java面试题】2020年6月腾讯Java数据结构与算法面试题
来源:亚博游戏    发布时间:2021-07-05 17:59:01
本文摘要:数据结构与算法请谈一谈,hashCode() 和equals() 方法的重要性体现在什么地方?

数据结构与算法请谈一谈,hashCode() 和equals() 方法的重要性体现在什么地方?Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当凭据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个差别的键可能会有相同的hash值,因此,可能会被荟萃认为是相等的。而且,这两个方法也用来发现重复元素。

所以这两个方法的实现对HashMap的准确性和正确性是至关重要的。请说一说,Java中的HashMap的事情原理是什么?HashMap类有一个叫做Entry的内部类。这个Entry类包罗了key-value作为实例变量。

每当往hashmap内里存放key-value对的时候,都市为它们实例化一个Entry工具,这个Entry工具就会存储在前面提到的Entry数组table中。Entry详细存在table的谁人位置是 凭据key的hashcode()方法盘算出来的hash值(来决议)。先容一下,什么是hashmap?HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。

HashMap 继续于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。HashMap 的实现不是同步的,这意味着它不是线程宁静的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。

HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。容量 是哈希表中桶的数量,初始容量 只是哈希表在建立时的容量。加载因子 是哈希表在其容量自动增加之前可以到达多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表举行 rehash 操作(即重建内部数据结构),从而哈希表将具有约莫两倍的桶数。

亚博游戏登入

通常,默认加载因子是 0.75, 这是在时间和空间成本上寻求一种折衷。加载因子过高虽然淘汰了空间开销,但同时也增加了查询成本(在大多数 HashMap 类的操作中,包罗 get 和 put 操作,都反映了这一点)。在设置初始容量时应该思量到映射中所需的条目数及其加载因子,以便最大限度地淘汰 rehash 操作次数。如果初始容量大于最大条目数除以加载因子,则不会发生rehash 操作。

亚博游戏

hashmap共有4个结构函数:// 默认结构函数。HashMap()// 指定“容量巨细”的结构函数HashMap(int capacity)// 指定“容量巨细”和“加载因子”的结构函数HashMap(int capacity, float loadFactor)// 包罗“子Map”的结构函数HashMap(Map<? extends K, ? extends V> map)讲一讲,如何结构一致性 哈希算法。

先结构一个长度为232的整数环(这个环被称为一致性Hash环),凭据节点名称的Hash值(其漫衍为[0, 232-1])将服务器节点放置在这个Hash环上,然后凭据数据的Key值盘算获得其Hash值(其漫衍也为[0, 232-1]),接着在Hash环上顺时针查找距离这个Key值的Hash值最近的服务器节点,完成Key到服务器的映射查找。这种算法解决了普通余数Hash算法伸缩性差的问题,可以保证在上线、下线服务器的情况下只管有多的请求掷中原来路由到的服务器。请问,Object作为HashMap的key的话,对Object有什么要求吗?要求Object中hashcode不能变。

请问 hashset 存的数是有序的吗?Hashset是无序的。TreeMap和TreeSet在排序时如何比力元素?Collections工具类中的sort()方法如何比力元素?TreeSet要求存放的工具所属的类必须实现Comparable接口,该接口提供了比力元素的compareTo()方法,当插入元素时会回调该方法比力元素的巨细。TreeMap要求存放的键值对映射的键必须实现Comparable接口从而凭据键对元素举行排序。Collections工具类的sort方法有两种重载的形式,第一种要求传入的待排序容器中存放的工具比力实现Comparable接口以实现元素的比力;第二种不强制性的要求容器中的元素必须可比力,可是要求传入第二个参数,参数是Comparator接口的子类型(需要重写compare方法实现元素的比力),相当于一个暂时界说的排序规则,其实就是通过接口注入比力元素巨细的算法,也是对回调模式的应用(Java中对函数式编程的支持)。

如何知道二叉树的深度?实现二叉树的深度方式有两种,递归以及非递归。①递归实现:为了求树的深度,可以先求其左子树的深度和右子树的深度,可以用递归实现,递归的出口就是节点为空。返回值为0;②非递归实现:使用条理遍历的算法,设置变量level记载当前节点所在的层数,设置变量last指向当前层的最后一个节点,当处置惩罚完当前层的最后一个节点,让level指向+1操作。

设置变量cur记载当前层已经会见的节点的个数,当cur即是last时,表现该层会见竣事。条理遍历在求树的宽度、输出某一层节点,某一层节点个数,每一层节点个数都可以接纳类似的算法。

树的宽度:在树的深度算法基础上,加一个记载会见过的层节点个数最多的变量max,在会见每层前max与last比力,如果max比力大,m。


本文关键词:亚博电子游戏官网,亚博游戏,亚博游戏登入

本文来源:亚博电子游戏官网-www.bjl602.com

上一新闻:科威特将向乌拨款560万美元,支持其配备医疗设备:亚博游戏

下一新闻:亚博电子游戏官网:深圳楼市调控新政细则来了

推荐阅读

企业要闻

企业动态

门窗百科

太阳能着色 互补系统 易护理 保温 环保节能
预约报名 免费测量 免费设计 免费报价 免费安装 终身维护
版权所有©2011-2020 扬州市亚博电子游戏官网股份有限公司
苏ICP备30992423号-9
联系地址: 江苏省扬州市天台县平代大楼516号
联系电话:0144-31968781
联系邮箱:663395747@qq.com
传真号码:075-366794569