成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

HashSet中怎么重寫haseCode和equals-創(chuàng)新互聯(lián)

這篇文章主要介紹“HashSet中怎么重寫haseCode和equals”,在日常操作中,相信很多人在HashSet中怎么重寫haseCode和equals問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”HashSet中怎么重寫haseCode和equals”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

站在用戶的角度思考問題,與客戶深入溝通,找到安徽網(wǎng)站設(shè)計與安徽網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋安徽地區(qū)。

為了保存數(shù)量不確定的數(shù)據(jù),以及保存具有映射關(guān)系的數(shù)據(jù),Java提供了集合類

集合中的Set,類似一個大罐子,可以依次把1至多個對象存入Set集合,Set集合通常無法記住元素的添加順序

而Set集合中不允許包含兩個相同的元素加入同一個Set集合中,在多個線程同時訪問同一個HashSet時,多個線程同時修改HashSet集合時,則必須通過代碼來保證其同步

那么HashSet是怎么樣區(qū)分不同元素的?這就要說到了hashCode和equals

在HashSet集合加了一個元素時,HashSet會調(diào)用該對象的hashCode方法來得到該對象的hashCode值,然后根據(jù)hashCode值決定該對象在HashSet中的位置,如果兩個元素通過equals方法比較返回true,但他們的hashCode方法返回值不相等,HashSet將會把他們存放在不同的位置,依然可以添加成功

也就是說HashSet辨別元素是否相同是通過equals判斷相等加上對比hashCode值

下面看一段代碼

class h
{
   public boolean equals( object obj)
{
        return true;
}
}
class z
{
   public int hashCode()
{
        return 1;
}
}
class t
{
   public int hashCode()
{
        return 2;
}
   public boolean equals( object obj)
{
        return true;
}
}
public class HashSetTest
{
  public static void main(String[] args)
  {
  var b=new HashSet();
  b.add(new h);
  b.add(new h);
  b.add(new z);
  b.add(new z);
  b.add(new t);
  b.add(new t);
  System.out.println(b);
  }
}

結(jié)果是:

h@5674dd,h@0987as,z@1,z@1,t@2

也就是說,

兩個h對象通過equals方法比較返回true,但HashSet依然把他們當(dāng)做兩個對象

兩個z對象通過hashCode返回相同值,但HashSet依然把他們當(dāng)做兩個對象

兩個t對象通過equals方法比較返回true,通過hashCode返回相同值,此時,HashSet才將他們當(dāng)為一個對象

可見:當(dāng)把一個對象放入HashSet中如果重寫equals就應(yīng)該重寫hashCode

當(dāng)equals對比兩個對象相等時,如果hashCode不同,則會將兩個相同的元素添加入HashSet,這就和Set集合的規(guī)則沖突了

此時,還有一種極端情況:如果hashCode相等,而equals不同,會怎么樣呢?

那么,將會更麻煩,HashSet試圖將他們放在一起,但是又不行

所以,將會采用鏈?zhǔn)浇Y(jié)構(gòu),保存多個對象,進(jìn)而影響性能,導(dǎo)致性能下降

到此,關(guān)于“HashSet中怎么重寫haseCode和equals”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

當(dāng)前題目:HashSet中怎么重寫haseCode和equals-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://jinyejixie.com/article40/dphjeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、微信公眾號、微信小程序、商城網(wǎng)站、網(wǎng)站營銷品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
溆浦县| 佛冈县| 麻江县| 陕西省| 嘉荫县| 中西区| 河池市| 沾益县| 恩施市| 紫金县| 平南县| 桑植县| 兴化市| 准格尔旗| 英吉沙县| 富顺县| 宁陵县| 朔州市| 田林县| 孟连| 大足县| 崇明县| 广河县| 大英县| 伊金霍洛旗| 泉州市| 新野县| 冕宁县| 吴堡县| 桐城市| 成武县| 安龙县| 青海省| 龙陵县| 荣昌县| 商洛市| 潮州市| 巴东县| 瓦房店市| 青川县| 建阳市|