使用Comparable对ArrayList进行排序

时间:2015-02-12 19:25:06

标签: java sorting arraylist

我正在开发一个项目,我需要能够按价格对Car对象的ArrayList进行排序。在我的汽车课上,我有

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));
}

4 个答案:

答案 0 :(得分:2)

两个问题:一个是合成的,一个是概念性的。

第一个问题是,当您的compareTo 技术上正确时,您希望将其绑定到Car而不是Object

public class Car implements Comparable<Car>

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

第二个是sortByPrice听起来具体,但由于compareTo基于价格进行比较,这有点好。

您需要做的就是在实际收集中调用Collections.sort

Collections.sort(carList);

答案 1 :(得分:0)

通常,使用

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

虽然collection必须实施Comparablesort使用compareTo方法对collection进行排序。

答案 2 :(得分:0)

您的Car课程必须实施Comparable<Car>。然后,您的compareTo方法将签名:

public int compareTo(Car other) {}

根据documentation,此方法应该:

  

返回负整数,零或正整数,因为此对象小于,等于或大于指定对象。

然后给出List<Car>,说list,您可以致电Collections.sort(list)

答案 3 :(得分:0)

你差不多完成了!只需拨打Collections.sort(carList);,即可使用被覆盖的compareTo。 实际上,当你没有实现compareTo时,你将拥有非常基本的实现,并且调用Collections.sort(..)将使用基本实现,即在这种情况下比较指针。