-1

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

取决于您执行的计算机?

我知道解决方案如果要实现一个 compareTo ,除了执行订单之外还使用其他参数,但我希望在任何情况下使用相同的列表返回列表会有所不同。

4

1 回答 1

2

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

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

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

当然,当 n1==n2 和 s1==s2 时,您仍然会遇到问题。但是也许这不是问题,因为如果所有数据都相同,则对象是等效的,对吗?;)

我希望它有帮助

于 2013-08-05T09:37:11.777 回答