Comparator的三点数学约束

Comparator的三点数学约束:

1. compare(a, b)和compare(b, a)二者的结果必须相反。

2. 如果compare(a, b)>0,并且compare(b,c)>0,那么就必须保证compare(a, c)是成立的。

3. 如果compare(a, b)==0,那么对于任何的x值,都应该保证compare(a, x)==compare(b, x)。

一种错误的写法是:

int compare(T a, T b) {

return a > b ? 1 : -1; // 严重错误!

}

假设a和b一样,那么:

compare(a, b)得到一个-1值。

compare(b, a)也会得到一个-1值。

结论:一定不能使用两极化的数字,必须使用三极化的数字。

发表评论