我正在研究这个非常小的项目,我有一个汽车对象的arraylist,我试图按价格升序打印出所有的汽车。当我在网上浏览时,似乎每个人都使用数组而不是arraylist?
关于如何使用数组列表实现这一点的任何想法?以下是我的代码。
public ArrayList<Car> sortPriceAcending(ArrayList<Car> cars) {
ArrayList<Car> sortedCars = new ArrayList<Car>();
Car temp;
for (int j = 0; j < cars.size() - 1; j++) {
for (int i = 0; i < cars.size() - 1; i++) {
Car car = (Car) cars.get(i);
Car car1 = (Car) cars.get(i + 1);
if (car.getPrice() > car1.getPrice()) {
temp = car;
cars.get(i) = cars.get(i + 1);
cars.get(i + 1) = temp;
sortedCars = cars;
}
}
}
return sortedCars;
}
答案 0 :(得分:7)
有许多排序算法可供选择。 Java本身已经提供了一个好的,您可以将它与Collections#sort
(official documentation)一起使用。该方法接受任何类型的List
和ArrayList
就是其中之一。
因此,您需要定义要排序的订单,您希望按价格排序。
您可以通过以下方式实施Comparable
来为您的汽车定义自然订购:
public class Car implements Comparable<Car> {
@Override
public int compareTo(Car other) {
return Integer.compare(this.getPrice(), other.getPrice());
}
// The other stuff of the car class
}
之后你可以使用Collections.sort(cars)
,它会根据你定义的自然顺序进行排序。
然而对于普通汽车而言,它们的自然排序可能并不是最好的选择。因此,您始终可以定义Comparator
对象并将其用于排序:
public class CarPriceComparator extends Comparator<Car> {
@Override
public int compareTo(Car first, Car second) {
return Integer.compare(first.getPrice(), second.getPrice());
}
}
您可以将其与Collections.sort(cars, new CarPriceComparator())
一起使用。
如果您喜欢 Java 8 附带的 Lambda表达式,您还可以使用较少的代码定义等效的Comparator
,如下所示:
Collections.sort(cars, Comparator.comparing(Car::getPrice))
答案 1 :(得分:0)
嘿你有没有尝试使用比较器接口? 如果您只需要总是按价格排序,请尝试使用类似的界面。 有关详细信息,请参阅以下链接:
如果您需要更多详细信息,请与我们联系
https://www.javatpoint.com/difference-between-comparable-and-comparator