我有一个带有 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 当然会丢弃重复项(取决于您对hashCode
and的实现equals
),这可能是您不想要的。
This question and it's very good answer也相关,并提供了对Java中排序集合的一个很好的概述。
郎朗坤
TA贡献1921条经验 获得超9个赞
仅实现Comparable
意味着该类为其实例提供了一些默认顺序。这并不意味着每个数组或集合都必须自动应用该 order。
例如,String
类还实现Comparable
了提供字典顺序的功能,但您仍然可以决定您的字符串应该放在数组中的哪个位置。这是可能的,因为当你这样做时
array[index] = element;
决定element
将放置在哪里只取决于index
,而不是任何特性element
。
要使用其元素的默认顺序对数组进行排序,您可以使用Arrays.sort(o);
,否则您的数组o
将在索引指定的位置保存元素。
添加回答
举报
0/150
提交
取消