【问题标题】:How does this comparator work?这个比较器是如何工作的?
【发布时间】:2014-04-17 15:16:16
【问题描述】:
package vehicles_order;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class vehicles implements Comparable  {

    String Vehicle;
    String Make;
    String Type;
    double Cost;


public static void main(String[] args){

    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));

    Collections.sort(cars);
    Iterator itr = cars.iterator();

    while(itr.hasNext()){
        Object element = itr.next();
        System.out.println(element + "\n");
    }
}

public vehicles(String vehicle, String make, String type, double cost){
    Vehicle = vehicle;
    Make = make;
    Type = type;
    Cost = cost;
}

public String toString() {
    return "Vehicle: " + Vehicle + "\n" + "Make: " + Make + "\n" + "Type: " + Type + "\n" + "Cost: " + Cost;    
}

public int compareTo(Object o1) {
    if (this.Cost == ((vehicles) o1).Cost)
        return 0;
    else if ((this.Cost) > ((vehicles) o1).Cost)
        return 1;
    else
        return -1;
}
}

我的比较器在底部,我只是想知道它实际上是如何工作的。我猜它就像一个堆栈,当它返回 1 时,如果它的 -1 向下移动,它就会向上移动堆栈。

另外,谁能告诉我如何通过不同的方法订购汽车。例如,将成本存储在临时最高值中,并检查新值是否高于当前值

【问题讨论】:

  • 该类应命名为Vehicle,并应实现泛型接口Comparable<Vehicle>,字段名称应为驼峰式(即类型、成本等)

标签: java comparison compare


【解决方案1】:

什么是 Comparable 接口?它是一个包含单个方法的接口:

compareTo(T o)

为 Java 提供将您的对象与其他对象进行比较的能力。基本上,您想将您的对象与同类(类)的对象进行比较。所以在 compareTo 实现中有一个通常的检查:

if (o instanceof vehicles) {
  Vehicles v = (Vehicles)o;

  // compare
} else {
  return false;
}

然后,在比较部分,您应该根据您的业务规则决定其他车辆是否与您的对象相等,或多或少。

  • 0 - 如果它们相等;
  • 1 - 如果您的对象更大;
  • -1 - 如果您的对象较小。

就这么简单!

【讨论】:

  • compareTo 方法不应该进行任何显式类型检查。如果提供的对象不是预期的类型,它应该以ClassCastException 失败。不过,大多数情况可以通过在相关类的声明中使用正确的泛型类型来避免。
【解决方案2】:

它使用冒泡排序,有时也称为下沉排序,是一种简单的排序算法,它反复遍历要排序的列表,比较每对相邻的项目,如果它们的顺序错误则交换它们。重复遍历列表,直到不需要交换,这表明列表已排序。

【讨论】:

    【解决方案3】:

    检查Javadoc

    @return 一个负整数、零或一个正整数,因为此对象小于、等于或大于指定的对象。

    【讨论】:

      【解决方案4】:

      Collections.sort(List list) 使用这个comapreTo() 方法来决定对象的自然排序。见http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多