音频文稿:
来看一下这道面试题,卡西扣的与 ecos,那么这道题呢,考察的也是程序员的这个基础了,掌握是否扎实,要想回答好这个问题,首先呢得明白这个 cacao 的是什么,Pecos 是用来干什么用的,那么首先呢,我们先来解释一下 Pecos 啊,cost 的话其实呢是这个,加瓦提供给这个程序员用来定义啊,就是我们在对比两个对象的时候啊,对比两个对象,这两个对象什么时候是相等的,什么时候是不相等的,那么用什么规则来定义,那么就是这个一口死方法,我们呢,可以去重写这个一口式方法来,定义了这两个对象的一个对比规则,就是按什么样的规则去对比来判断呢,这两个对象是否相等啊,那么这个一口式,我们如果说不去做做重写啊,你如果不去重写那么默认呢,采用的是 object 中的这个一口式,那么 object 中的 egos 呢,实际上就是我们的双等于号啊,就是我们的双等于号,他对比的呢,就是这个对象在站中的这个引用地址,那么如果是基本类型变量的话,对比的就是站中的这个值啊,对比的是引用地址,那么一般来说呢我们的这个对象呢,通常呃比如说我们的思俊啊,他呢就会去重写这个 Pecos,还有呢像我们普通的这个对象啊,如果说你想,如果说你想
让他在对比的时候,你想只对比这个成员变量,而不是去比他的这个对象地址的话,那么你也可以去重写这个 Pecos 啊,去定义这个对比规则,那么 Rocco 的啊,那么卡西扣得的解释了,我们来看一下这个笔记啊,那么卡西扣的呢,实际上呢他是一个哈西马啊,也称作为闪电马,那么在我们加瓦中的这个卡西,扣的这个方法,实际上就是用来了获取这个卡西马啊,或者是说闪念马,那么卡西扣的这个方法呢,他是定义在这个 jdk 的,这个 object 的,这个类中的啊,他是一个 lati5 方法,是一个本地方法啊,那么他呢,会返回一个 inter 型的一个整数,会返回一个 inter 型的一个整数啊,他是什么作用呢,实际上在我们家法中这些对象啊,这个对象是放在存在我们这个堆中,对不对,那么在堆中怎么样去找到这个对象,在堆的哪一个位置呢,那么这个时候实,机上是维护了一张哈西表啊,这个哈西表中的这个锁影,就是我们的这个卡西扣的啊,那么通过这个锁影呢,可以很快的去,从这个卡西表里面找到我们这个对象,在这个堆中的这个存储位置啊,也就是说,这个硬的值,这个硬的整形就是这个锁影啊,那么,我们加瓦有了这个锁隐之后,我们加瓦有了这个锁隐之后
他就可以很快的啊,在这个卡其表中就去找到这个对象,在堆中是什么位置,然后马上就可以把这个对象呢,给取出来啊,那么这个,object 中的这个卡西扣的了,那么他第一在欧巴借给了中,所以呢加瓦中的任何类,他都包含了这个卡西扣的函数啊,不管你有没有显示的去啊,去重写对吧,那么这卡西扣的函数呢他都是有的,其实这个闪电表中呢,存的就是一个 pla,扭直啊就是我们的,所以马屁就是我们的,所以啊那么,它主要的作用就是,能够帮助我们快速的解锁,出了这个对应的一个值啊,好那么为什么要有这么一套机制呢,这套机制到底是干什么用的啊,这个卡西扣的为什么需要从这个啊,就是利用这个锁隐,快速的找到这个对象有什么用呢,我们来看一下啊,以这个卡西塞啊,如何检查重复用这个例子,我们来来来解释一下,这个卡西扣的是存在的一个意义啊,那么呢,我们都知道这个卡西赛特他呢是一个,就是一个集合吗,不可以放重复的元素啊,重复的元素往里边放了是,放不了了对不对他是,不能存储重复的元素的,那么这个咖啡赛的他是怎么样的检查,这个元素,跟我这个咖啡赛的里面已有的元素,是否重复了,那么这个重复是怎么样定义的啊,那么这个重复是怎么样定义的啊
怎么样去检查的,我们来看一下啊,当一个对象或者说一个元素啊,往这个卡西塞的里面去放的时候,这个卡西塞的呢,那首先呢,就会,根据我们的这个卡西扣的这个方法啊,当然你如果重写了就掉,你重写的这个卡西扣的方法,没有重写,那么掉的就是这个 object 中的这个,at 5方法啊,就是这个 casco 的方法,来了判断就是,就是计算出一个卡西扣的值啊,获取出获取到这个卡西扣的值之后,那么对应着的,就是我们卡西表中的这个位置,对不对,这卡西扣的就是一个锁影位置啊,那么计算出来了这卡西扣的值之后,然后呢找到这个位置啊,来判断这个位置上面呢,是否有值,也就是说我算出来了一个位置,比如说这有一张哈西表对不对,这张卡其表里面呢有很多的位置啊,大家可以理解为比如说是一个数组,对不对,这个数组里面有很多的这个下标,那么呢我根据这个卡西扣的,其实呢已经把这个下标算出来了,比如说我算的下标是这个,那么呢我来看一下这个下标,这个位置是否有值,是不是已经存储了元素,如果说这个地方要是没有元素,他是空的,那就意味着这块内存呢,他是个空的对不对,没有放东西那么 ok,直接了把这个值了放进来,直接了把这个值了放进来
那就假设对象呢,没有重复出现,那么这个对象呢可以顺利的啊,就是 a 的到我们这个卡西塞的中,那么如果在这个位置上发现有,值的话啊,这个位置如果发现有值,意味着什么意味着我算出来了,这个卡西扣的跟这个,跟这个位置上的这个,元素他的这个卡西扣的是相同的,这个就叫做卡西冲突啊也就是说,这个地方已经有值了,他的卡西扣的是这个对不对,是这个位置啊,那么我现在呢又计算出了一个卡西,根据另外一个值啊,又计算出了一个哈西扣的也在这里啊,然后呢,这个地方当了哈西扣的就是一样的,对不对那么这个时候怎么办呢,那那这就判断这两个元素是同一个吗,他不见得啊,这个时候呢他还会去调用一个1扣4,因为呢在我们这个哈西扣的这个闪,电算法里面啊,这个闪电算法,不同的值呢,两个完全不一样的数字啊,他都是有可能的,计算出相同的纳西扣的的,这个是呢,这个闪电算法的一个嗯,可以说是他的,这个闪电算法所决定的啊,两个不一样的值他是有可能的,计算出一个相同的哈希扣格的,但是这两个值呢,可能他确实不一样,那么这个时候怎么办呢,这个时候呢就要调用这个意口式了,也就是我们程序员呢,自己来定义的,这个就是对比的这个方法,这个就是对比的这个方法
那么这两个对象到底相不相同,最终由女程序原来说了算对不对,那么,用这个意口式的来检查这两个对象呢,是否真的相同,那么这个时候如果调用了你重,写的这个一口词,他还是相同的话,那么这个时候呢,就意味着这两个元素了就冲突了,他就是相当于就是,嗯就是相等的对不对,当一口时你如果没有重写,那么就是双等于比较,看他的是否是同一个内存地址啊,内同一个对象引用啊,那么如果是相同的话,那么哈西赛的不会让他呢,成功加入对不对,那么如果是不一样的话哎,如果说我计算出的哈西扣的是一样的,但是我一口死了发现呢,这两个对象的不一样啊不一样,那么这个时候怎么办呢,我还往这里放吗那就不不行了啊,如果是不一样的话那么就重新闪裂,你是按照这个闪电算法啊,重新计算重新计算呢,得到得到一个另外的一个闪电值,当然这个地方呢,肯定是会做一些特殊的处理啊,做一个特殊的处理让这个值呢,比如说加盐啊,等等操作让这个值呢,计算出一个,额,外的就是一个另外的一个卡西扣的值,然后这样的话呢,他的值位置呢就变了对不对,比如说计算到了这个位置,计算到这个位置上来了,然后呢,再次来判断看这个位置是否相同,对不对这样的话呢就能够啊,对不对这样的话呢就能够啊
保证我这个元素呢,绝对不会跟我这个,哈西 cet 中的这些元素了,重复啊,那么这样做有什么好处呢,我们来发现啊,如果说,你的哈西扣的要是不一样的话啊,如果说计算出这个哈西扣的,这个地方是空的话,我还需要需要一口四吗,不需要直接放进去就可以了对不对,也就是说了这个地方,压根就没有任何值,跟我的哈西扣的是一样的,我都不需要一扣4啊,那么这个这样的话呢,其实就大大的减少了这个,一口死的一个,一个次数啊,对吧如果说没有这个卡西扣的的话,如果没有这个卡西扣的,我们是不是要跟这个闪列表中,所有的值都要去一口试一下对不对,所有的每一个值我都要去一口试一下,看它是否相等,哎如果不相等,那么呢如果相等,我就不能放不相等我才能往里边放,对不对那么呢,这个一口十他是比较好性能的,他要去对比这个呃内存地址,而卡西扣的呢,这个哈西扣的这个闪电算法呢,这个性能是相当之高的,那么这样呢,就可以大大的,提高我们程序的这个执行的一个速度,啊好,那么这个就是 cocco 的一个概念啊,那么明白了这个原理之后,那么对于这道题目,我们通常呢会怎么样去回答啊,当然这个,原理部分问到了就要说对不对,原理部分问到了就要说对不对
没有问到当然你可以不说啊,那么如果只是简单的问,这个卡西扣的,跟 egos 到底是什么区别,到底是缺什么区别跟联系啊,当然你也可以去说一下这个东西啊,那么主要呢我们是通过以下这几个,呃规定啊,就是在我们程序代码中,这个咖 cco 的跟 Pecos 他的这个,在我们代码里面啊,就是必须是遵守这样的规则,什么样的规则呢,那么如果两个对象相等的话,那么咖 ccu 的一定是相同的啊,这个是我们程序必须要去保证的啊,就是两个对象相等,那么他吸扣的一定是相同的,那么如果两个对象相等啊,对这两个对象分别调用一口子方法,那么了肯定也是要返回为处的啊,然后呢,两个对象如果有相同的哈吸扣的值,但是他们也不一定是相同的,我们之前呢,在这咖啡赛的里面已经已经讲过了啊,正因为有这种有这种判断规则,在这里啊,所以说,如果说你要去覆盖一口的方法,那么了哈,吸扣的方法你也必须覆盖,不然的话呢,在这咖啡赛的这里面就会出问题,对不对,好,然后呢哈西扣的的这个默认行为呢,是实际上就是对我们堆上的对象呢,产生一个锁隐值吗就是一个独特值啊,如果没有重写卡西扣的啊那么,这个克拉斯的一个类的两个对象的,这个克拉斯的一个类的两个对象的
无论如何他都是不会相等的啊,也就说他的卡西扣的,如果如果你没有重写的话,那么呢,两个对象对应着两个引用地址对不对,那绝对是不会相等的啊,那么,即使你这两个对象呢,拥有相同的这个成员数据对不对,那么如果你想让他,像拥有相同的成员数据,让他能够呃对比的时候也是相等的话,那么你就要去重写咖吸扣的重写,1扣4,那么这就是呃咖吸扣的跟呢这个,一口似的呃,这个面试的怎么回答的这个内容,