可以在不同的情况下返回compareTo不同的结果

时间:2013-08-05 09:21:25

标签: java compareto

我有一个很大的疑问,例如我有一个名称列表和一个可能对不同名称相同的值,当我做一个compareTo它将按数字返回列表顺序。但我的问题是,如果我在具有相同列表的计算机中执行应用程序,将返回相同的列表吗?

将compareTo与您执行的计算机相关联?

我知道解决方案是否实现了compareTo除了执行命令之外还使用其他param,但我想如果在任何情况下使用相同的列表返回列表它将是不同的。

1 个答案:

答案 0 :(得分:2)

我不确定我是否理解你的问题。 如果两个项目的值相同,则compareTo将返回0(在这种情况下,因为此“数字”相同)。此函数compareTo仅定义算法对项目进行排序的顺序,并由排序算法决定哪一个将是第一个。如果使用相同的算法,列表完全相同,则输出应该相同,至少对于大多数公共算法而言,因为它们不是随机的。但是,如果更改列表或算法,结果可能会完全不同。

因此,为避免这种情况,您可以重新实现comapreTo函数以比较第二个值,以防第一个值相同。例如,如果你有2个数字:n1和n2匹配2个字符串s1和s2,你应该这样做:

int comparison = n1.compareTo(n2);
if (comparison == 0){
    return s1.compareTo (s2));
}

当然,当n1 == n2和s1 == s2时,你仍然会遇到问题。但是,这可能不是问题,因为如果所有数据都相同,那么对象是等价的,对吗? ;)

我希望它有所帮助