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