按价格属性对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; 
} 
+1

如果要基于对象的多个属性进行排序,可以使用java.util.Compartor 接口。 - 你将不得不使用Collections.sort(名单>升,比较器C),例:类yourComparatorimplements比较 { 公众诠释比较(OBJ OBJ1,OBJ OBJ 2){ 回报obj1.getAttribute()的compareTo (OBJ 2。的getAttribute()); } } –

有很多可用的排序算法。爪哇本身已经提供了一个很好的,你可以使用它与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())使用它。


如果你喜欢lambda表达式出来的Java 8你也可以用更少的代码定义相当于Comparator喜欢这里看到:

Collections.sort(cars, Comparator.comparing(Car::getPrice)) 

请注意,我有没有测试代码,可能有一些小错别字。

嘿你有没有尝试过使用比较接口? 如果你只需要总是按价格排序,只能使用可比的界面。 您可以参考以下链接了解详情:

让我知道,如果你需要更多的细节

https://www.javatpoint.com/difference-between-comparable-and-comparator

+0

我会仔细研究它现在感谢 – Elwin