HashSet和TreeSet如何确定元素的唯一性?

往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

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.