2015-09-05 106 views
1

我有以下對象集合:LinkedHashSet的對象,而無需重寫的hashCode()和equals()

Set<MyClass> test = new LinkedHashSet<MyClass>(); 

MyClass沒有覆蓋hashcodeequals方法。

即使MyClass不覆蓋hashCodeequals方法,上述集合是否只有唯一對象?

+6

它將根據身份包含唯一對象,但不會根據您擁有的任何其他平等定義。如果您希望集合根據某些非同一性的定義定義包含唯一對象,請覆蓋這些方法。 –

+0

[您可以訴諸公用集合並實現外部哈希和平等提供程序](http://stackoverflow.com/a/20030782/521799) –

回答

6

equals的默認實現是檢查標識(即使用==運算符)。您的LinkedHashSet(或其他HashSet,對於這種情況)將包含唯一的對象,因此無法將兩個對象相加。但是,如果以完全相同的方式創建兩個實例(例如,將相同的參數傳遞給構造函數),則您的集合仍將包含它們兩個,因爲它們不是equals

+0

謝謝您的回答。 – aurelianr

相關問題