如何在不使用'可比较的'的情况下获得ArrayList中的最低值。

时间:2014-04-17 16:29:28

标签: java sorting arraylist

这是我的数组

 ArrayList cars = new ArrayList();
    cars.add(new vehicles ("CAR","Peugot","3008",12500.00));
    cars.add(new vehicles ("CAR","BMW","316",4995.00));
    cars.add(new vehicles ("CAR","Ford","Fiesta",2995.00));

我希望有一种方法可以从最便宜的方式将这些按顺序放入,但我不想使用比较方法。也许创建一个临时变量并使用值检查此变量,如果它们更便宜则覆盖这些值。

我试过这个

public static void main(String[] args){

    ArrayList carsArray = new ArrayList();
    carsArray.add(new vehicles ("CAR","Peugot","3008",12500.00));
    carsArray.add(new vehicles ("CAR","BMW","316",4995.00));
    carsArray.add(new vehicles ("CAR","Ford","Fiesta",2995.00));


    vehicles lowestPrice = (vehicles) carsArray.get(0);
    for(vehicles car : carsArray){
        if(car.Cost<lowestPrice.Cost){
            lowestPrice = car;
        }
    }

}

然而我仍然犯了一个错误:/&#39; carsArray&#39;在forloop中用红色加下划线

4 个答案:

答案 0 :(得分:1)

您可以使用以价格为关键字且车辆对象为值的TreeMap。然后按价格对其进行分类,您可以将车辆的所有信息作为值。

答案 1 :(得分:0)

Car lowestPrice = cars.get(0);
for(Car car : cars) {
   if(car.price<lowestPrice.price) {
       lowestPrice = car;
   }
}

关于带红色下划线的ArrayList ...将其替换为

ArrayList<Vehicles> yourlist = new ArrayList<Vehicles>();

答案 2 :(得分:0)

如果您想使用OP中提到的方法,您可以为static课程声明vehicles变量,在contructor中,您可以检查价格是否低于实际最低价格 但我的建议是使用ComparatorComparable因为这是他们的自然使用。还可以在各种set方法中更改对象的值,您必须知道

如果你还想这样做。你可以这样做

public static int min_price=Integer.MAX_VALUE;

然后在contructor方法中 if(price<min_price)min_price=price;

答案 3 :(得分:0)

如果您想对列表中的项目进行排序,可以使用Collections.sort(List<T> list, Comparator<? super T> c)方法并提供自己的Comparator

class VechiclePriceComparator implements Comparator<vechiles> {

  public int compare(vechiles v1, vechiles v2) {

    if(v1 == v2) {
       return 0;
    )

    return Double.compare(v1.getPrice(),v2.getPrice());

  }

}