2014-02-26 83 views
-2

我有散列映射<< String, AddressBO >>key和類作爲value,其中AddressBO是具有add1add2citystatezip等領域,並在地圖我只有兩個一類鍵 - 小學和中學有價值的是AddressBO的對象。現在我必須比較地址是相同還是不同,即兩個對象的值是相同的。爲此,我必須覆蓋等於和hashcode方法在AddressBo類或implement comparator interface的HashMap <字符串,AddressBO>在Java

+0

你可以試試機器人的所有對象返回相同的值h解決方案。它會工作。 – Antoniossss

+0

值不是哈希,只有鍵,所以重寫hashcode是相當無用的。無論您是創建equals還是compareTo方法,還是創建比較器,都無關緊要,它們都可以工作。 – Martin

回答

0

這個問題其實沒有什麼關係HashMap,它更多的只是「我怎麼在java中比較對象」。是的,如果您想做任何不僅僅是參考匹配的事情,您需要覆蓋equals。此外,如果您覆蓋equals,則還應覆蓋hashCode以維持equalshashCode之間的合同。雖然hashCode對於HashMap對象的值是無關緊要的,但如果您嘗試將對象用作另一個HashMap的關鍵字,則可能很重要。重寫compareTo是你應該做的事情,如果你打算把你的對象放在一些可能進行排序的結構中。

0

Comparable接口是用於排序,不相等的測試。當然,如果兩個對象在邏輯上相同,你應該得到a.compareTo(b)=b.compareTo(a)=0,但是反過來並不總是對的。假設你想按姓氏和名字按字母順序排列一個人名單。有兩個人叫John Doe,一個是1956年出生的,一個是1996年可以按任何順序上市 - 但他們不是同一個人。

如果要測試兩個對象是否相等,請執行equals(Object)(和hashCode(),當然)。

0

如果要比較一個類的兩個對象,類應該實現comparable接口。你也應該重寫了hashCode和equals(即使你不希望使用這些功能...因爲事情可能會改變未來,你還不如實現,同時你還了解什麼是您的複雜對象中的事情)

如果你看看equals()的定義(「javadoc的Java語言),你會注意到它必須定義一個平等的關係(自反,對稱和傳遞)和檢查equals(null)應該總是返回null。

同樣, hashCode()也必須一致(相匹配equals()

相關問題