使用 Comparable 对 ArrayList 进行排序

Sort ArrayList using Comparable

我正在做一个项目,我需要能够按价格对 Car 对象的 ArrayList 进行排序。在我的车里 class,我有

public class Car implements Comparable

在代码主体中是 compareTo 方法:

    public int compareTo(Object o)
    {
        Car rhs = (Car)o;

        if (price > rhs.price)
            return 1;
        else if (price < rhs.price)
            return -1;
        else
            return 0;
    }

我只是不明白如何实现这种按价格排序的方法- carList 需要与什么进行比较?我知道这是不正确的,但到目前为止这是排序方法。

public void sortByPrice()
{
    Collections.sort(carList.compareTo(o));
}

两个问题:一个语法问题,一个概念问题。

第一个问题是,虽然您的 compareTo 在技术上 正确的,但您想将其类型绑定到 Car 而不是 Object.

public class Car implements Comparable<Car>

在您的 compareTo 方法中,您可以将 Object 替换为 Car。您还需要检查 null.

第二个是sortByPrice听起来很具体,但由于compareTo是根据价格进行比较,所以还可以。

您需要做的就是对实际集合调用 Collections.sort

Collections.sort(carList);

通常,使用

对集合进行排序
Collections.sort(collection)

collection 必须实现 Comparablesort 使用 compareTo 方法对 collection.

进行排序

您的 Car class 必须实施 Comparable<Car>。那么您的 compareTo 方法将具有签名:

public int compareTo(Car other) {}

根据 documentation,此方法应该:

Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

然后给定一个List<Car>,说list,你可以调用Collections.sort(list)

你快完成了!只调用 Collections.sort(carList); 并且它自己会使用覆盖的 compareTo。 实际上,当你没有实现 compareTo 时,你将拥有非常基本的实现,调用 Collections.sort(..) 将使用基本实现,在这种情况下它是比较指针。