gpt4 book ai didi

java - 这两个 compareTo 方法有什么区别?

转载 作者:搜寻专家 更新时间:2023-11-01 01:15:26 25 4
gpt4 key购买 nike

我想了解这两种方法有什么区别?它们都可以用于同一个问题吗?或者它们是为不同的情况设计的?

public int compareTo(Coordinates o) {
if (row < o.row) return -1;
if (row > o.row) return +1;

if (column < o.column) return -1;
if (column > o.column) return +1;
return 0;
}
@Override
public int compareTo(Coordinates o) {
int cmp = row - o.row;
if (cmp == 0)
cmp = column - o.column;
return cmp;
}

最佳答案

这两种方法具有相似的行为:它们将返回一个负值 if row < o.row和正值if row > o.row . If row == o.row , 他们会返回一个负值 if column < o.column和正值if column > o.column . If both row==o.rowcolumn==o.column , 他们会返回 0。

这意味着这两种方法都可用于对 Coordinates 的列表进行排序, 首先是 row参数然后通过 column参数。

不过,第一种方法比较安全。

第二种方法可能会因数值溢出而失败。例如,如果 row - o.row 的结果应小于 Integer.MIN_VALUE ,即使 row 减法的实际结果将变为正数小于 o.row .

当然为了不重复造轮子,还是靠Integer.compare()比较好并写下:

public int compareTo(Coordinates o) {
int res = Integer.compare(row,o.row);
return res == 0 ? Integer.compare(column,o.column) : res;
}

关于java - 这两个 compareTo 方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57376176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com