当前位置: 首页 > 面试题库 >

如何对数组或ArrayList进行排序 ASC首先是x,然后是y?

刁星渊
2023-03-14
问题内容

我只想使用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
++,在其中使用等效的等效方法创建了一个名为Point的结构。


问题答案:

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

顺便说一句,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;
    }
}


 类似资料:
  • 问题内容: 我只想使用Collections.sort或Arrays.sort首先按x然后按y对点列表(Point类)进行排序。 我有一个像这样实现Comparable的Ponto类: 但是现在我也想在x之后按y排序。 如何通过修改上面的代码来做到这一点?还是这是一种更好且“干净”的 方法?我还使用了将此代码传递给C ,在C 中,我 使用等效的可比较方法创建了一个称为Point的结构。 问题答案:

  • 我已经能够得到这个数组,因此它是使用' m '排序的,但是结果是按保护顺序排序的——因为所有包含' m '的字符串都在末尾。 我的打印输出显示:; 我考虑过使用indexOf(),但我还没能找到一种方法让它工作。 非常感谢您的建议!

  • 问题内容: 我看到在SQL中,GROUP BY必须在ORDER BY表达式之前。这是否意味着在分组丢弃相同的行/列之后就完成了排序? 因为我似乎需要首先按时间戳记列A对行进行排序,然后才丢弃列A中具有相同值的行。不知道如何完成此操作… 我正在使用MySQL 5.1.41 数据可以是: 我想要的结果是: 基本上,我想要B列中具有最新时间戳的行(请考虑ORDER BY),而A列中的每个值仅需要一行(请

  • 问题内容: 我在Java中有一个双打列表,我想按降序对ArrayList进行排序。 输入如下: 输出应该是这样的 问题答案: 那会做你想要的。请记住要导入!

  • 问题内容: 在发现了惊人的发现之后,我再次陷入了困境。 问题是我有一个形式的字典,我需要按其整数值的降序对其进行排序, 但是 如果两个元素的值相同,则按键的升序排列。 一个使它更清楚的例子: 经过研究后,我得出以下结论: 这是因为它对值和键都进行了反向排序。我需要不撤消的钥匙。 问题答案: 就像是

  • 问题内容: 我目前正在创建一种排序方法,该方法由mysql查询的值组成。 这是数组的简要视图: 我已经成功地基于数字id值进行了正常的排序,但是我想按“国家/地区”字段的内容对数组进行排序(如果在这种情况下包含设置的字符串和国家/地区代码),然后通过id字段。 以下代码段是我的第一个想法,但我不知道如何将其合并到工作功能中: 你会怎么做? 谢谢! 不幸的是,我真的一无所获。 这是我目前拥有的东西,