2012-12-09 66 views
2

我有兩套LinkedHashSet對象,在這個對象內我有其他的對象有更多的LinkedHashSetLinkedHashSet等於方法

我的問題是:

是否equals方法(默認)檢查是否所有的內部HashSets是一樣的嗎?或者我必須覆蓋它?

+4

除了Docs解釋這個,爲什麼不寫一個簡單的測試用例並找出答案呢? –

回答

6

默認情況下,它將確保HashSets的內容是equals()。 LinkedHashSet也是有序的,但這並不在hashCode或equals中使用,所以它們可能有不同的順序,仍然是equals = true。

簡而言之,順序對於HashSets的等於無關緊要,「equals」不等於「相同」。 「相同」通常意味着它是同一個對象。

1

Set.equals()的合同是每套的每個成員都包含在另一箇中。每個contains測試都依賴於集合中對象的equals()方法。

該規範要求沒有Set實現可以依賴作爲對象標識的equals()的默認實現。 (就Set規範而言,集合中的對象可以自由使用默認的Object.equals()來測試相等性,但是如果有一組集合,(外部)集合中的對象本身就是Set對象,因此主體相同的Set合同有關equals()。)

欲瞭解更多信息,請參閱該文檔爲Set.equals()Set.contains(Object)