没有重写hashCode()和equals()的对象上的LinkedHashSet

aur*_*anr 1 java generics equals hashcode linkedhashset

我有以下对象集合:

Set<MyClass> test = new LinkedHashSet<MyClass>();
Run Code Online (Sandbox Code Playgroud)

MyClass不会覆盖hashcodeequals方法.

上面的集合只能有唯一的对象,即使MyClass没有覆盖hashCodeequals方法吗?

Mur*_*nik 6

默认实现equals是检查身份(即使用==运算符).您LinkedHashSet(或任何其他HashSet,对于该情况)将包含唯一对象,因为您将无法两次添加相同的对象.但是,如果以完全相同的方式创建两个实例(例如,将相同的参数传递给构造函数),则您的集合仍将包含它们,因为它们不是equals.