为了账号安全,请及时绑定邮箱和手机立即绑定

数组不会自动对可比较的对象进行排序

数组不会自动对可比较的对象进行排序

湖上湖 2022-07-20 20:46:43
我有一个带有 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 参数进行排序。
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

Java 中的数组不会自动排序(一般的集合也不会)。对于您需要调用的数组

Arrays.sort(boxes);

如果使用集合,您可以使用

Collections.sort(boxList);

或者使用SortedSet / Map代替(例如TreeSet)。这些类型的集合将在插入时自动对其元素进行排序并保持自然顺序。

正如@AndyTurner 所指出的, Sets and Maps 当然会丢弃重复项(取决于您对hashCodeand的实现equals),这可能是您不想要的。

This question and it's very good answer也相关,并提供了对Java中排序集合的一个很好的概述。


查看完整回答
反对 回复 2022-07-20
?
郎朗坤

TA贡献1921条经验 获得超9个赞

仅实现Comparable意味着该类为其实例提供了一些默认顺序。并不意味着每个数组或集合都必须自动应用该 order

例如,String类还实现Comparable了提供字典顺序的功能,但您仍然可以决定您的字符串应该放在数组中的哪个位置。这是可能的,因为当你这样做时

array[index] = element;

决定element将放置在哪里取决于index,而不是任何特性element

要使用其元素的默认顺序对数组进行排序,您可以使用Arrays.sort(o);,否则您的数组o将在索引指定的位置保存元素。


查看完整回答
反对 回复 2022-07-20
?
炎炎设计

TA贡献1808条经验 获得超4个赞

你实际上有几个不同的选择。其中一些正在创建您自己的排序功能,如前所述,或者使用带有适当比较器的集合排序。您可能需要查看此 SO 主题以获取有关该主题的更多详细信息。另外,请记住在发布之前使用搜索,这是在键入“java sort by object field”或类似内容后弹出的第一件事。



查看完整回答
反对 回复 2022-07-20
  • 3 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信