专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

通过源码探查HashSet究竟是如何保证唯一性的

  面试官:你能简单介绍下List和Set有什么区别吗?
  小憨:List是一个有序的集合,在内存是连续存储的,可以存储重复的元素,List查询快,增删慢;Set是一个无序的集合,在内存中不连续,不可以存储重复的元素,Set增删快,查询慢;
  面试官:那HashSet是如何保证元素不重复的?
  小憨:3分钟
  为了避免出现小憨这种知其然不知其所以然的尴尬,我们还是有必要来分析下上述问题的。
  客官,且看下文
  我们都知道HashSet存放的元素是不允许重复的,那么HashSet又是是如何保证元素不可重复的,你知道吗?
  先看段源码publicclassHashSetEextendsAbstractSetEimplementsSetE,Cloneable,java。io。Serializable{staticfinallongserialVersionUID5024744406713321676L;privatetransientHashMapE,Objectmap;privatestaticfinalObjectPRESENTnewObject();publicHashSet(){mapnewHashMap();}publicHashSet(Collectionlt;?extendsEc){mapnewHashMap(Math。max((int)(c。size()。75f)1,16));addAll(c);}publicHashSet(intinitialCapacity,floatloadFactor){mapnewHashMap(initialCapacity,loadFactor);}}
  乍一看这段代码,哎呦我去,newHashSet()操作不就不是维护了一个HashMap嘛,要是这么往下演的话,我觉得我这点功力也能看个大概呀!
  诸位同仁,咱接着往下看publicbooleanadd(Ee){returnmap。put(e,PRESENT)null;}
  什么,这不就是map操作么,瞬间我来个下饭推理;
  Map中的key是不允许重复的,而你HashSet正好利用我Map中key不重复的特性来校验重复元素,妙哉妙哉。
  确实,HashSet确实是利用Map的这一特性实现了元素的不重复特性,但是我们再来深挖一下,Map他又是如何来保证key不重复的呢?
  与其说这篇文章是介绍HashSet如何保证元素不重复的,倒不如说Map是如何保证Key不重复的。finalVputVal(inthash,Kkey,Vvalue,booleanonlyIfAbsent,booleanevict){NodeK,V〔〕tab;NodeK,Vp;intn,i;if((tabtable)null(ntab。length)0)n(tabresize())。length;1、如果该位置不存在,直接插入if((ptab〔i(n1)hash〕)null)tab〔i〕newNode(hash,key,value,null);else{NodeK,Ve;Kk;2、如果存在,判断是否是重复元素if(p。hashhash((kp。key)key(key!nullkey。equals(k))))ep;elseif(pinstanceofTreeNode)e((TreeNodeK,V)p)。putTreeVal(this,tab,hash,key,value);else{for(intbinCount0;;binCount){if((ep。next)null){p。nextnewNode(hash,key,value,null);if(binCountTREEIFYTHRESHOLD1)1for1sttreeifyBin(tab,hash);break;}if(e。hashhash((ke。key)key(key!nullkey。equals(k))))break;pe;}}if(e!null){existingmappingforkeyVoldValuee。value;if(!onlyIfAbsentoldValuenull)e。valuevalue;afterNodeAccess(e);returnoldValue;}}modCount;if(sizethreshold)resize();afterNodeInsertion(evict);returnnull;}
  上面部分我重点圈了两段代码,分别是1和2。
  第一段if((ptab〔i(n1)hash〕)null)
  这段代码其实主要是通过hash计算该元素的位置,然后判断该位置是否有值,如果没有值,那么可以直接插入,最后返回null;
  第二段if(p。hashhash((kp。key)key(key!nullkey。equals(k))))ep;
  如果通过计算,该位置上已经有其他元素,那么接下来就会通过hash和equals进行判断,判断它是不是重复元素,如果重复元素,那么最后会将这个重复元素返回。
  通过第二段代码我们可以发现,判断元素是否重复,使用的是hash和equals方法进行判断的,所有我们Set里面如果存放的是对象,那么一定要重写hash和equals方法。
  现在是不是很清晰了,为啥要重写equals方法了,不会出现那么诡异的代码了,这两个对象值都一样啊,为什么Set没去重呢!

镜头里的剑阁美成了一幅画杨村镇官店村花开的时节,记者前往天府旅游名县广元市剑阁县,用镜头感受该县美丽乡村的蝶变。普安镇光荣村如今咱们村里吃的好空气好,一点都不比城里差,真要感谢党的好政策!井泉村村民杨小花赏樱正当时!长沙这条粉色大道成热门打卡地高大繁密的樱花树几乎在路中间结成了一个樱花穹顶。华声在线3月25日讯(记者王一辰实习生贺熙)又到一年赏樱季,长沙的樱花如约绽放,赏樱人络绎不绝。除了去省植物园看染井吉野樱,长沙还有荣耀和iQOO都在用,天玑6020是何方神圣?网友发哥也开始挤牙膏最近iQOOZ7i和荣耀Play7T都上线了,大家会发现他们用的是处理器是天玑6020,从这两款手机的价格,大家应该明白天玑6020的产品定位不高,主要还是用于入门5G手机,那么天奶奶和姥姥谁带孩子比较好?用事实说话比较好我住的小区有对双胞胎女孩,奶奶和姥姥各带了一个。刚生下来的时候,姐姐5。2斤,妹妹4。7斤,还在保温箱里面呆了几天。在医院里的时候,因为奶奶要跑上跑下的忙,先出生的假如七八个月的宝宝引产了,那医院会把宝宝的身体怎么处理?我就是亲身经历者。当时我已经怀孕315了,去产检的时候医生发现没有了胎动,给我紧急做了B超,然后结果就是死胎了,做了引产手术。我还坚强的配合医生,顺产把孩子生了下来,当时发现是脐带邻居一位12岁小孩跳楼了,现在孩子心理那么脆弱,如何预防?多半家长要检讨自己。不要一遇到事情就说小孩子心里脆弱。教育专家李玫瑾曾说要加强家庭教育中的心理抚养。孩子的一路成长的过程中,至少会出现两个叛逆期,也总会出现各种这样那样的问题。像过宝宝喝了妈妈长时间心情不好的奶水会怎么样?奶水的质量是一样的,只是可能生气会影响奶量,会导致产奶量下降,老是生气就会导致孩子不够吃的,这样也会更加加重大人的负担,影响妈妈的心情。其次,婴儿是在妈妈肚子里孕育十个月才出生的,春节档电影票房破11亿,长津湖已破五亿,你最期待哪一部?今年2022春节档电影,奇迹笨小孩,四海,狙击手,这个杀手不太冷静,长津湖水门桥,这几部相对是关注度比较高的!今天大年初二,但是我一部都还没有看!不出意外的话,水门桥基本已经锁定春杭州皋亭山景区旅游攻略,建议收藏备用作为杭州最具代表性的自然景观之一,皋亭山位于余杭山区。夏日漫步在皋亭山上,登高远眺,绿树成荫的山林池塘相映成趣,令人身心愉悦。本文为您提供杭州皋亭山景区旅游攻略,让您在旅途中更加得金沙税务便民春风吹进油菜花田阳春三月,春意盎然。在毕节市金沙县岩孔街道,1200亩油菜花进入盛花期,迎春绽放,金黄的花田一片片在山野间公路旁连绵起伏,春风拂过,花香飘然而至,花蕊随风摇曳,蜜蜂翩翩起舞。绽放的花朝节主会场都有哪些好玩的?这条盘点不容错过以蝶变新时代,花朝新生活为主题的2023崇明花朝节于3月23日迎春启幕。上周末,游客们来到花朝节主会场东平国家森林公园畅游花海,欣赏生态崇明的春日风光。接下来,跟着记者的镜头,看看
18日资金线路图主力资金流入医药生物等板块点蓝字关注,不迷路10月18日,A股市场走势有所分化。截至收盘,上证指数收报3080。96点,下跌0。13深证成指收报11187。7点,上涨0。23创业板指收报2446。93点,上读书人是幸福人我常想,读书人是世间幸福人,因为他除了拥有现实的世界之外,还拥有另一个更为浩瀚也更为丰富的世界。现实的世界是人人都有的,而后一个世界却为读书人所独有。由此我想,那些失去或不能阅读的请在乌克兰的中国公民撤离转移当前,乌克兰境内安全形势严峻,外交部和中国驻乌克兰使馆呼吁尚在乌克兰的中国公民务必加强安全防范并撤离转移。驻乌克兰使馆将协助组织有需要人员撤离转移,请在乌人员尽快与使馆联系,并登记俄罗斯民众打算安葬列宁,普京强势应答只要我还是总统,看谁敢列宁是伟大的无产阶级革命导师,但在他死后,遗体也和毛主席一样长期存放而没有下葬。俄罗斯民众打算安葬列宁,但是普京强势回应,他不同意安葬列宁这样的做法。列宁的遗体保存国内战争结束后,俄罗斯造了好坡,乌克兰跑了驴1975年黎巴嫩内战爆发,人们带着简单的行李逃离这个号称东方瑞士的天堂之地,他们在塞浦路斯希腊和法国的酒店里等着,以为战争会在几天内结束17年后,战争终于结束,很多人再也没有回到黎读到一篇好的文章真的会心里欢喜文章账号虽然我关注了很多,但是其实看得少。大多时候就是碰运气。如果刚好那天有心情,点到一篇文章,恰好看到了。今天看的一篇文章是来自于林安的。这个账号我忘记是什么时候开始关注的。但今把生命浪费在美好的事情上一一一抄书有感吴晓波是我非常喜欢的财经作家,被誉为中国青年领袖。他的第一本散文集把生命浪费在美好的事物上在朋友处看到,一看到书名就眼晴一亮,生命从头到尾都是一场浪费,你需要判断的仅仅在于这次浪费NBA搞笑1幕凯尔特人大将太猛了,上篮把鞋子踩爆,冒出一阵烟儿北京时间10月15日,NBA季前赛一场焦点战,波士顿凯尔特人对阵多伦多猛龙。比赛中,发生搞笑一幕,凯尔特人队格兰特威廉姆斯太生猛了,在一次上篮时竟然把鞋子给踩爆了,那画面极其搞笑,每天自信,提升自己1,人最大的运气不是捡到钱,而是某天你遇到了一个人,他打破了你原来的思维,提高了你的认知,既而提升你的境界,带你走向更高的境界,这就是你人生的贵人。2,努力的人就像千里马,贵人就像英超托特纳姆热刺VS埃弗顿热刺主场做好准备,力求击败对手实力有所差距!热刺实力占据优势,本场看好球队拿下北京时间10月16日00点30分,英超将会迎来托特纳姆热刺与埃弗顿的交手,本场将会在托特纳姆热刺球场进行。对于两队的实力状况来看,作人和酒一样都是矛盾体,淡了嫌没味道,浓了又怕喝过头王阳明说世间磨难,皆是砥砺。人间是道场,淤泥生莲花。这是一种心态,更是一种境界。拥有此境界的人,已经习惯了世间的磨难,具备了抵御和战胜困难的勇气和能力。心胸已变得干净和豁达,已把磨
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网