Java 数组不';t自动排序可比较的对象
我有一个包含3个双值的类框。任务是对其中一个值进行排序并打印结果。下面是一个代码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) {
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你可能想删除这个问题如果下面的一个答案解决了你的问题,你应该接受它(单击相应答案旁边的复选标记)。这可以做两件事。它让每个人都知道您的问题已经解决到您满意的程度,并让帮助您的人相信您的帮助。为了获得完整的解释,“这些类型的收藏将自动订购”,但它们也将丢弃重复的收藏。