国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java中怎么比較兩個自定義實體對象是否相等(比如在Set數(shù)據(jù)結(jié)構(gòu)中去重)

這篇具有很好參考價值的文章主要介紹了java中怎么比較兩個自定義實體對象是否相等(比如在Set數(shù)據(jù)結(jié)構(gòu)中去重)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

需求

有一個類Person,需要判斷Account類的對象account1,account2是否相等。
判斷規(guī)則為,當(dāng)id(int類型判斷是否帶下相等)和department(判斷字符串內(nèi)容是否相等)屬性均相等時(默認(rèn)兩個屬性都必須非空,若有屬性為空則認(rèn)為兩個對象不等),則認(rèn)為該Account類對象相等。

public class Account{
	private int id;
	private String department;
}
Account account1 = new Account(1,"用戶處");
Account account2 = new Account(1,"用戶處");

以下開始介紹如何判斷自定義類是否按照指定規(guī)則相等。

前提介紹

Java中所有類都繼承自O(shè)bject類,該類擁有equals方法,對象之間比較大小都是默認(rèn)調(diào)用equals方法(可能會重寫該方法),比如最常見的Integer或者String類對象,之間比較大小都是默認(rèn)重寫并調(diào)用了該方法。
下面的String,Integer源碼解析,引用大佬文章,
Java Set對象去重
java.lang.Integer.equals():兩個對象對應(yīng)的值一致則返回true。

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

java.lang.String.equals():兩個字符串對應(yīng)的值一致則返回true:

public boolean equals(Object anObject) {
    if (this == anObject) {//同一個對象,必定是一致的
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {//對比每一個字符
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;//anObject不是String實例,那么返回false
}

而如果不重寫該方法,默認(rèn)調(diào)用的是java.lang.Object.equals()方法:兩個對象的引用是否一致,即兩個的對象是否是同一個。

public boolean equals(Object obj) {
    return (this == obj);
}

但是我要比較自定義的值是否相等,并不希望是比較兩者之間的引用是否相等,而是需要當(dāng)判定他們的全部屬性相等時則認(rèn)為他們相等。

對于自定義對象進(jìn)行比較

所以根據(jù)上面的先驗知識,知道要對于自定義對象按照自定義規(guī)則比較是否相等,肯定得重寫equals方法。
如下:

@Override
public boolean equals(Object object){
	if(object == null){
		return false;
	}
	if(object == this){
		return true;
	}
	if(object instanceof Account){
		Account account = (Account) object;
		try{
				if(account.id == this.id && account.department.equals(this.department)){
					return true;
				}
			}
		catch(Exception e){
			//對象的屬性不全,則返回false
			return false;
		}
	}
	return false;
}

HashSet判斷兩個元素相等的標(biāo)準(zhǔn)是兩個對象通過hashCode()方法返回的值相等并且兩對象通過equals()方法比較相等,所以如果將對象輸入在HashSet中,光是實現(xiàn)equals方法還是無法實現(xiàn)去重的效果,必須還得同時重寫hashCode方法。
因為在HashSet插入新元素流程中,先根據(jù)hashCode方法獲得對象的hashCode值,然后通過hashCode值計算得到hash值決定該對象在HashSet中的存儲位置。
然后再通過equals比較,如果equals返回值為false,那兩個元素還是不會被認(rèn)定為同一元素,hashSet會在這個位置用鏈?zhǔn)浇Y(jié)構(gòu)保存新加入的元素。
hashCode方法如下:

@Override
public int hashCode(){
	try{
		return id.hashCode() + department.hashCode();
	}catch(Exception e){
		Random random = new Random();
		return random.nextInt(100);
	}
}

總結(jié)

如果想要實現(xiàn)自定義對象在HashSet實現(xiàn)自定義規(guī)則去重,需要重寫自定義對象的hashCode和equals方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-564845.html

到了這里,關(guān)于java中怎么比較兩個自定義實體對象是否相等(比如在Set數(shù)據(jù)結(jié)構(gòu)中去重)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python字符串比較:如何判斷兩個字符串是否相等?

    Python字符串比較:如何判斷兩個字符串是否相等? 在Python編程中,字符串是最常用的數(shù)據(jù)類型之一。當(dāng)我們需要比較兩個字符串時,通常需要判斷它們是否相等。這篇文章將詳細(xì)介紹Python中比較兩個字符串的方法。 使用“==”運算符比較字符串 在Python中,可以使用“==”運算

    2023年04月11日
    瀏覽(111)
  • Go語言如何判斷兩個對象是否相等

    在編程中,判斷兩個對象是否相等是一項常見的任務(wù),同時判斷對象是否相等在很多情況下都非常重要,例如: 單元測試 :編寫單元測試時,經(jīng)常需要驗證函數(shù)的輸出是否符合預(yù)期,這涉及到比較對象是否相等。 數(shù)據(jù)結(jié)構(gòu)操作 :在使用 map 等數(shù)據(jù)結(jié)構(gòu)時,可能需要判斷兩個對

    2024年02月07日
    瀏覽(646)
  • 在JS中如何判斷兩個對象是否相等

    在JavaScript中,判斷兩個對象是否相等有多種方法,取決于你對 相等 的定義以及對象屬性的類型。以下是幾種常見的方法: ? 1. 嚴(yán)格相等運算符 (===) 使用 === 運算符可以比較兩個對象是否引用同一個對象。如果兩個變量引用了同一個對象,則它們是相等的,否則它們是不相等

    2024年02月03日
    瀏覽(92)
  • 淺談java自定義中類兩個對象的比較

    淺談java自定義中類兩個對象的比較

    目錄 實現(xiàn)比較兩個對象是否相同 1.前置代碼 1.學(xué)生類 2.示例? 3.輸出? 4.原因 2.那么我們要怎么做呢? 1.對Student類中重新實現(xiàn)quals方法(即對equals方法重寫)? 2.完整代碼如下: 3.具體操作 4.演示 1.示例 2.輸出 3.原因? 實現(xiàn)比較兩個對象的大小? 第一種: 用接口的方式實現(xiàn),實現(xiàn)一個

    2024年02月09日
    瀏覽(19)
  • Java中比較Long類型是否相等

    Java中,比較Long類型是否相等,可以使用“==”和“equals()”方法。 在Java中,\\\"==\\\"用于比較兩個基本數(shù)據(jù)類型或兩個引用數(shù)據(jù)類型是否指向同一對象。對于Long類型的封裝類,由于它們的值在-128到127之間時會被緩存,因此這些值相同的Long型對象會指向同一個對象,使用\\\"==\\\"比較會

    2024年02月05日
    瀏覽(22)
  • 【python基礎(chǔ)知識】python中怎么判斷兩個字符串是否相等

    【python基礎(chǔ)知識】python中怎么判斷兩個字符串是否相等

    目錄 有哪些判斷方法 1. == 運算符 2. is 運算符 有哪些特殊情況 1. 字符串中包含空格、換行符、制表符等特殊字符 2. 字符串編碼格式的不同 3. 字符串對象的創(chuàng)建方式不同 注意事項 1. 避免使用is運算符進(jìn)行字符串比較 2. 注意空格、換行符、制表符等特殊字符的影響 3. 注意字符

    2024年02月08日
    瀏覽(112)
  • java中比較兩字符串是否相等

    字符串比較的三種方式:==,equals,Objects.equals ?打印結(jié)果 a==b為false 因為兩個字符串的索引值不同。 打印結(jié)果為? a.equals(b)為true 因為兩個字符串的值相同。 所以在java中進(jìn)行字符串比較時,經(jīng)常使用equals比較兩字符是否相同。一個固定的字符串和字符串?dāng)?shù)組(或list集合)進(jìn)行

    2023年04月08日
    瀏覽(23)
  • java 判斷兩個List是否包含 判斷兩個list相等

    java 判斷兩個List是否包含 判斷兩個list相等 https://blog.51cto.com/u_12855/7333853 1、直接使用equals()比較 眾所周知,兩個列表具有完全相同的元素并且具有完全相同的順序時,它們是相等的。因此, 如果我們業(yè)務(wù)要求兩個list順序一致,可以使用equals()方法進(jìn)行相等性檢查: 即使

    2024年02月04日
    瀏覽(132)
  • java判斷字符串是否和空字符串(““)相等、是否和空引用(null)相等,比較順序不同導(dǎo)致出現(xiàn)死代碼(Dead code)

    java判斷字符串是否和空字符串(““)相等、是否和空引用(null)相等,比較順序不同導(dǎo)致出現(xiàn)死代碼(Dead code)

    我在用Java實現(xiàn)需求的時候,用到了字符串跟空字符串(“”)比較,跟空引用null比較,兩個比較語句的順序不同,一個順序出現(xiàn)了死代碼(Dead code)。 下面這個代碼片段,字符串line跟空字符串(“”)的比較放在跟null的比較前面,編譯器提醒紅色方框中的代碼是死代碼:

    2024年02月14日
    瀏覽(28)
  • 判斷兩個數(shù)組是否相等

    在判斷兩個數(shù)組是否相等之前,我們應(yīng)該弄清楚數(shù)組怎樣才算相等,官方給的解釋是這樣的: Returns true if the two specified arrays of ints are equal to one another. Two arrays are considered equal if both arrays contain the same number of elements, and all corresponding pairs of elements in the two arrays are equal. In other

    2024年02月15日
    瀏覽(89)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包