按价格属性对arraylist中的对象进行排序

时间:2017-08-03 17:19:24

标签: java arraylist

我正在研究这个非常小的项目,我有一个汽车对象的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;
}

2 个答案:

答案 0 :(得分:7)

有许多排序算法可供选择。 Java本身已经提供了一个好的,您可以将它与Collections#sortofficial documentation)一起使用。该方法接受任何类型的ListArrayList就是其中之一。

因此,您需要定义要排序的订单,您希望按价格排序。

您可以通过以下方式实施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