欢迎访问雷泽体育中国历史网!

【Java面试题】2020年6月腾讯Java数据结构与算法面试题

时间:2021-11-17 01:22作者:雷泽体育

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

雷泽体育

数据结构与算法请谈一谈,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。


本文关键词:【,Java,雷泽体育,面,试题,】,2020年,6月,腾讯,数据结构

本文来源:雷泽体育-www.hlhbdjc.com