I have a class box with 3 double values. The task is to sort one of the values and print the results. Below there is a code
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);
}
}
There is no errors in this code, but it is not sorting x parameter too.
答案 0 :(得分:1)
Java中的数组不会自动排序(通常也不是集合)。对于数组,您需要调用
Arrays.sort(boxes);
如果使用集合,则可以使用以下方式对现有列表进行排序
Collections.sort(boxList);
或改为使用SortedSet / Map(例如TreeSet)。这些类型的集合会在插入时自动对其元素进行排序,并保持自然顺序。
正如@AndyTurner所指出的那样,Sets and Maps当然会丢弃重复的内容(取决于您对hashCode
和equals
的实现)。
This question,而且很好的答案也与之相关,并且总体上很好地概述了Java中的集合排序。
答案 1 :(得分:1)
实施Comparable
仅表示该类为其实例提供某些默认顺序。 这不是不是,这意味着每个数组或集合都必须自动应用该顺序。
例如,String
类还实现了Comparable
,它提供了 lexicographical 顺序,但是您仍然可以决定将字符串放置在数组中的位置。可能是因为您这样做
array[index] = element;
element
放置位置的决定仅{strong>取决于index
,而不取决于element
的任何特征。
要使用元素的 default 顺序对数组进行排序,可以使用Arrays.sort(o);
,否则数组o
将元素保留在索引指定的位置。
答案 2 :(得分:-1)
您实际上有几种选择。他们中的一些人正在创建您自己的排序功能,或者使用具有适当比较器的Collection排序。您可能需要检查this SO topic以获得该主题的更多详细信息。另外,请记住在发布之前使用搜索,这是键入“ java sort by object field”之类的东西后弹出的第一件事。