2017-08-03 139 views
0

我正在處理這個非常小的項目,我有一個汽車對象的數組列表,我試圖按價格升序打印所有車輛。當我環顧網上時,似乎每個人都在用數組來完成它,而不是數組列表?按價格屬性對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()); } } –

回答

5

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

請注意,我有沒有測試代碼,可能有一些小錯別字。

相關問題