猿问

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

我有一个带有 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 参数进行排序。


湖上湖
浏览 104回答 3
3回答

一只萌萌小番薯

Java 中的数组不会自动排序(一般的集合也不会)。对于您需要调用的数组Arrays.sort(boxes);如果使用集合,您可以使用Collections.sort(boxList);或者使用SortedSet&nbsp;/&nbsp;Map代替(例如TreeSet)。这些类型的集合将在插入时自动对其元素进行排序并保持自然顺序。正如@AndyTurner 所指出的, Sets and Maps 当然会丢弃重复项(取决于您对hashCodeand的实现equals),这可能是您不想要的。This question&nbsp;and it's very good answer也相关,并提供了对Java中排序集合的一个很好的概述。

郎朗坤

仅实现Comparable意味着该类为其实例提供了一些默认顺序。这并不意味着每个数组或集合都必须自动应用该 order。例如,String类还实现Comparable了提供字典顺序的功能,但您仍然可以决定您的字符串应该放在数组中的哪个位置。这是可能的,因为当你这样做时array[index]&nbsp;=&nbsp;element;决定element将放置在哪里只取决于index,而不是任何特性element。要使用其元素的默认顺序对数组进行排序,您可以使用Arrays.sort(o);,否则您的数组o将在索引指定的位置保存元素。

炎炎设计

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

相关分类

Java
我要回答