Java 数组不';t自动排序可比较的对象

Java 数组不';t自动排序可比较的对象,java,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) {

我有一个包含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);
        }
    }
public类框实现了可比较的{
私人双x;
私人双y;
私人双z;
私人双卷;
@凌驾
公共内部比较(方框o){
返回this.x>o.x?1:this.x对于(int i=0;i您实际上没有多少不同的选项。其中一些选项正在创建您自己的排序功能,如前所述,或者使用带有适当比较器的集合排序。您可能需要检查以获取主题的更多详细信息。此外,请记住在发布之前使用搜索,这是键入后弹出的第一件事“java按对象字段排序”或类似的内容。

java中的数组不会自动排序(通常也不会自动排序集合)。对于数组,您需要调用

Arrays.sort(boxes);
如果使用集合,则可以使用

Collections.sort(boxList);

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

正如@AndyTurner所指出的,集合和映射当然会丢弃重复项(取决于
hashCode
equals
的实现),这可能是您不想要的


这是一个非常好的答案,也是相关的,它提供了Java中集合排序的良好概述。

实现
Comparable
只意味着类为其实例提供了一些默认的顺序。它并不意味着每个数组或集合都必须自动ap按那个顺序做

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

array[index] = element;
元素
将被放置在何处的决定只取决于
索引
,而不取决于
元素
的任何特征


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

您应该发布您的命令,以便我们可以看到您实际执行排序的位置,即调用
数组的位置。排序(框)
,等等。好吧……你从来没有真正调用或实现过排序。你到底期望什么?你的排序方法只会打印出其中的内容,这是所有的,谢谢,添加了数组。排序(o);在排序函数中,ok Now你可能想删除这个问题如果下面的一个答案解决了你的问题,你应该接受它(单击相应答案旁边的复选标记)。这可以做两件事。它让每个人都知道您的问题已经解决到您满意的程度,并让帮助您的人相信您的帮助。为了获得完整的解释,“这些类型的收藏将自动订购”,但它们也将丢弃重复的收藏。