java - 数组不会自动对可比较的对象进行排序
问题描述
我有一个带有 3 个双精度值的类框。任务是对其中一个值进行排序并打印结果。下面有一段代码
public class Box implements Comparable<Box> {
private double x;
private double y;
private double z;
private double volume;
@Override
public int compareTo(Box o) {
return this.x > o.x ? 1 : this.x < o.x ? -1 : 0;
}
public static void sorting (Box[] o)
{
System.out.println();
for (int i = 0; i<o.length; i++)
{
System.out.println(o[i].x);
}
}
这段代码没有错误,但也没有对 x 参数进行排序。
解决方案
仅实现Comparable
意味着该类为其实例提供了一些默认顺序。这并不意味着每个数组或集合都必须自动应用该 order。
例如,String
类还实现Comparable
了提供字典顺序的功能,但您仍然可以决定您的字符串应该放在数组中的哪个位置。这是可能的,因为当你这样做时
array[index] = element;
决定element
将放置在哪里只取决于index
,而不是任何特性element
。
要使用其元素的默认顺序对数组进行排序,您可以使用Arrays.sort(o);
,否则您的数组o
将在索引指定的位置保存元素。
推荐阅读
- postgresql - 当窗口函数结果相等时使用另一个顺序
- git - 在 github-actions 中推送新提交(更新当前)时如何取消 PR 中的先前运行
- javascript - 在不假设有问题的情况下获取用户输入
- node.js - 节点加密而不是 JSEncrypt 用于使用公钥加密
- css - 在 Bootstrap 中更改颜色箭头
- node.js - node-gyp 安装成功但失败并出现错误:gyp ERR!堆栈错误
- java - 如何制作会发生变化的圆形碰撞箱?
- sql - 如何在不写 where 条件的情况下在查询中使用时间函数?
- android - 从 xml 调用 View Model 方法不会在 android 中调用问题
- android - 使用 Work Manager 更新网络请求的逻辑