java - 如何先按 x 然后按 y 对数组或 ArrayList<Point> ASC 进行排序?

标签 java c++ sorting comparison

我只想使用 Collections.sort 或 Arrays.sort 先按 x 然后按 y 对点列表(Point 类)进行排序。

我有一个像这样实现 Comparable 的 Ponto 类:

public int compareTo(Ponto obj) {
        Ponto tmp = obj;
        if (this.x < tmp.x) {
            return -1;
        } else if (this.x > tmp.x) {
            return 1;
        }
        return 0;
    }

但现在我也想在 x 之后按 y 排序。

如何通过修改上面的代码来做到这一点?或者这是一种更好、更“干净”的方法吗? 我还使用将此代码传递给 C++,在 C++ 中我使用等效的可比较方法创建了一个名为 Point 的结构。

最佳答案

this.yobj.y 上的相同比较算法替换 return 0

顺便说一句,这里不需要重新分配给tmp。优化后的图片看起来像:

public int compareTo(Ponto other) {
    if (this.x == other.x) {
        return (this.y < other.y) ? -1 : ((this.y == other.y) ? 0 : 1);
    } else {
        return (this.x < other.x) ? -1 : 1;
    }
}

关于java - 如何先按 x 然后按 y 对数组或 ArrayList<Point> ASC 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2741846/

相关文章:

c++ - 作为宏参数给出的先前定义的常量被视为字符串文字

jquery - 选中复选框时将类添加到所有其他 div

algorithm - 反向数组中的选择排序比插入排序更快吗?

java - 如何编辑特定 JButton 的数据

java - 没有这样的字段错误: NULL Spring Error

java - 字符串 switch 语句

java - if 语句替代 Java 8

仅限 C++ 头文件的项目 - 从不同的程序集中使用

c++ - 将变量参数列表转发到模拟 std::thread

python - 根据两个字典对列表进行排序