java - 使用对象的 float 属性的 compareTo() 方法。它是如何使用的,为什么?

标签 java compareto

我类的代码,我完全看不懂。我在互联网上读到 compareTo() 方法用于比较字符串与字符串以及对象与字符串,但在我的代码中它用于比较 float 与字符串,我猜?!您能否解释一下在下面的代码中如何使用 compareTo() 方法以及我们为什么在我们的案例中使用它?

package ro.ase.acs.classes;

import ro.ase.acs.interfaces.Mobility;
//Comparable is a generic interface; click add unimplemented methods ; the method will appear at the end of the class
public final class Car extends Vehicle implements Mobility, Cloneable,Comparable<Car> {
    public static final int maxNbOfKm = 1_000_000;//it is static, in order to acces it use .
    private EngineType engineType;
    private float speed;

    public Car() {
        super();
        engineType = EngineType.gas;
        speed = 0;
    }

    public Car(String _name, EngineType _engineType, float _speed) {
        super(_name, true);
        engineType = _engineType;
        speed = _speed;
    }

    @Override
    public void Start() {
        System.out.println("The " + engineType.toString() +
                " car has started!");
    }

    @Override
    public void Stop() {
        System.out.println("The " + engineType.toString() +
                " car has stopped!");
    }

    @Override
    public void DisplaySpeed() {
        System.out.println(String.format("The %s car runs with %f km/h",
                engineType.toString(), speed));
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("The car named ");
        sb.append(name);
        sb.append(" has a(n) ");
        sb.append(engineType.toString());
        sb.append(" engine and is running with ");
        sb.append(speed);
        sb.append(" km/h");
        return sb.toString();
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        Car c = (Car)super.clone();
        c.engineType = engineType;
        c.speed = speed;
        return c;
    }

    @Override
    public boolean equals(Object obj) {
        if(!(obj instanceof Car)) {
            return false;
        }
        else {
            Car c = (Car)obj;
            return name.equals(c.name);
        }
    }

@Override
public int hashCode()
{
    return 31*name.hashCode()+13*(HasEngine()?1:0)+7*engineType.hashCode()+(int)speed*100;
}


    public enum EngineType { gas, diesel, electric, hybrid }



    @Override
    public int compareTo(Car o) {
        if(speed==o.speed)
        {return 0;}
        else if (speed>o.speed)
        {
            return 1;
        }
        else
        {return -1;}




    }

//  public final int hashCode() {
    //  return engineType.hashCode();
//  };
}

最佳答案

Comparable接口(interface)的契约,分别是compareTo()方法是:

  • 从排序的角度来看,当两个对象被认为“相同”时,它返回 0
  • 它分别返回 -1 和 +1(准确地说是任何负值或正值),以指示“其他”对象何时小于或大于“此”对象。

换句话说:该方法提供了一种方法来定义可以排序的对象的自然顺序。

如果按速度订购汽车真的有意义,那就完全不同了。我会争辩说:,这没有意义。如果有的话,您可以/应该定义外部 Comparator 对象来定义“订购”汽车的不同方式,然后 SpeedComparator 显然会按速度排序(但以明确的方式)。

关于java - 使用对象的 float 属性的 compareTo() 方法。它是如何使用的,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55268940/

相关文章:

java - Spring @ExceptionHandler 返回 HTTP 406

java - 私有(private)实例变量可在 compareTo 内使用 "public"范围访问

java - 如何将compareTo与节点一起使用?

java - 在 Java 中,我应该使用什么来实现首先返回最大元素的 PriorityQueue?

java - getter 的良好命名约定

java - 使用 Jquery Ajax 将数据从 jsp 发送到 struts2 Action 类

java - 查找单向链表的倒数第 K 个元素

java - 比较两个 HashMap 键是否相等?

java - 如何在同一行代码中正确使用instanceof和compareTo?

java - 二维数组未按预期填充