往Set里先后加入两个“有点相像”的对象,最后Set里会有一个对象还是两个?
实验结论如下:
HashSet
两个对象是否彼此equals ? | 两个对象hashCode是否相等 | 最终Set大小 | 备注 |
true | true | 1 | |
true | false | 2 | 有点违反Set接口契约 |
false | true | 2 | |
false | false | 2 |
TreeSet
TreeSet在判断唯一性时不考虑hash code; 从下面的结果你也可以发现,它连equals()都不理会。
两个对象是否彼此equals ? | 两个对象compare后是否相等 | 最终Set大小 | 备注 |
true | true | 1 | |
true | false | 2 | |
false | true | 1 | 违背了Set接口的契约,令人吃惊? |
false | false | 2 |