1
我有以下對象集合:LinkedHashSet的對象,而無需重寫的hashCode()和equals()
Set<MyClass> test = new LinkedHashSet<MyClass>();
但MyClass
沒有覆蓋hashcode
和equals
方法。
即使MyClass不覆蓋hashCode
和equals
方法,上述集合是否只有唯一對象?
我有以下對象集合:LinkedHashSet的對象,而無需重寫的hashCode()和equals()
Set<MyClass> test = new LinkedHashSet<MyClass>();
但MyClass
沒有覆蓋hashcode
和equals
方法。
即使MyClass不覆蓋hashCode
和equals
方法,上述集合是否只有唯一對象?
equals
的默認實現是檢查標識(即使用==
運算符)。您的LinkedHashSet
(或其他HashSet
,對於這種情況)將包含唯一的對象,因此無法將兩個對象相加。但是,如果以完全相同的方式創建兩個實例(例如,將相同的參數傳遞給構造函數),則您的集合仍將包含它們兩個,因爲它們不是equals
。
謝謝您的回答。 – aurelianr
它將根據身份包含唯一對象,但不會根據您擁有的任何其他平等定義。如果您希望集合根據某些非同一性的定義定義包含唯一對象,請覆蓋這些方法。 –
[您可以訴諸公用集合並實現外部哈希和平等提供程序](http://stackoverflow.com/a/20030782/521799) –