我类的代码,我完全看不懂。我在互联网上读到 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/