考虑以下compareTo方法,实现Comparable< T>.接口.:
@Override
public int compareTo(MyObject o)
{
if (o.value.equals(value)
return 0;
return 1;
}
显然,程序员将compareTo实现为equals().显然是个错误.我希望这会导致Collections.sort()崩溃,但事实并非如此.相反,它只会给出一个任意结果:排序结果取决于初始排序.
public class MyObject implements Comparable
{
public static void main(String[] args)
{
List objects =
Arrays.asList(new MyObject[] {
new MyObject(1), new MyObject(2), new MyObject(3)
});
Collections.sort(objects);
System.out.println(objects);
List objects2 =
Arrays.asList(new MyObject[] {
new MyObject(3), new MyObject(1), new MyObject(2)
});
Collections.sort(objects2);
System.out.println(objects2);
}
public int value;
public MyObject(int value)
{
this.value = value;
}
@Override
public int compareTo(MyObject o)
{
if (value == o.value)
return 0;
return 1;
}
public String toString()
{
return "" + value;
}
}
结果:
[3, 2, 1]
[2, 1, 3]
我们能否为compareTo的这种奇怪实现提出一个用例,或者它总是无效的.如果是后者,它应该抛出异常,还是甚至不能编译?