我很困惑(Java新手)
我read:
TreeSet实际上并没有使用equals()。它使用compareTo() 相反 - 如果compareTo()返回零,则表示两个对象是 "等于"就TreeSet而言。
大。
所以我有:
public class User implements Comparable<User>
{
String Username;
String Password;
@Override
public int compareTo(User o)
{
return o.Username.compareTo(this.Username );
}
}
我也有:
public static void main(String[] args)
{
TreeSet<User> ts = new TreeSet<User>();
User u = new User();
u.Username="u";
ts.add(u);
User u1 = new User();
u1.Username="u";
ts.add(u1); //<---------------
System.out.print(u1.compareTo(u)); //0
}
查看debug:compareTo
- 返回&#34; 0&#34;。 (他们有相同的顺序)
如果是这样的话:
问题
为什么当我插入2&#34;同样有序&#34;时,我不会得到例外。元素?
答案 0 :(得分:4)
答案 1 :(得分:1)
向任何Set
添加两个相同的元素时没有例外。第一次添加将返回true
boolean addU = ts.add(u); // returns true
而第二个会返回false
boolean addU1 = ts.add(u1); // returns false
请注意,您的测试很难看到compareTo
与equals
不一致时会发生什么,因为您依赖于compareTo
java.lang.String
方法,这与equals
。