我正在开发一个项目,我需要能够按价格对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));
}
答案 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
必须实施Comparable
而sort
使用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(..)
将使用基本实现,即在这种情况下比较指针。