项目类
public class Item implements Comparable {
private int number;
private String description;
public Item(int num, String descript){
this.number = num;
this.description = descript;
}
public int getNumber(){
return number;
}
public String getDescription(){
return description;
}
@Override public int compareTo(Object o){
Item i = (Item) o;
if(this.getNumber() < i.getNumber())
return -1;
if(this.getNumber() > i.getNumber())
return 1;
return 0;
}
}
主要方法
Item[] items = new Item[3];
items[0] = new Item(102, "Duct Tape");
items[1] = new Item(103, "Bailing wire");
items[2] = new Item(101, "Chewing Gum");
Arrays.sort(items);
for (Item i : items){
System.out.println(i.getNumber() + ": " + i.getDescription());
}
当main方法实例化items[0] = new Item(102, "Duct Tape");
时,通过Item构造函数设置当前变量号,描述。
我的问题是我似乎无法理解compareTo参数中传递的内容,因此我似乎无法理解this.getNumber() < i.getNumber()
正在做...
如果当前对象小于传递对象,则返回负数?
非常感谢任何帮助。
答案 0 :(得分:1)
您正在使用的原始界面Comparable
允许此对象与另一个Object
相媲美。然后将其转换为Item
,以确保this
Item
仅与另一个Item
进行比较。
将此对象与指定的订单对象进行比较。返回一个 负整数,零或正整数,因为此对象较少 比,等于或大于指定的对象。
此外,如果compareTo
不是ClassCastException
,您的Object
会在运行时抛出Item
。
使用界面的通用形式更好:
public class Item implements Comparable<Item> {
然后,您可以指定Item
代替Object
进行比较:
@Override public int compareTo(Item i){
并且您不必将Object
投射到Item
。调用compareTo
时,编译器会强制要比较的对象必须是Item
。
答案 1 :(得分:1)
我的问题是我似乎无法理解
中传递的内容compareTo
参数
Array.sort
使用compareTo
方法知道如何比较数组中的项目对。
您的排序方法假定只会使用Item
的实例调用它,并且所有Array.sort
都会传递给compareTo
,假设您的数组只保存{{1}的实例}}
如果调用Item
且被比较的项目不是compareTo
的实例,则会收到运行时异常。
我似乎无法理解
Item
正在做...
它正在根据this.getNumber() < i.getNumber()
的值比较Item
的两个实例,即getNumber
字段的值。它假定number
的两个实例相等,如果Item
对于每个实例都相同,否则如果Item.number
小于另一个Item.number
,则其中一个小于另一个实例
答案 2 :(得分:0)
您正在尝试覆盖默认的compareTo()
方法,该方法将单个Object
作为参数。因此,在您的实现中,参数必须是Object
类型。但是,您假设您将传入Item
对象,因此您可以相应地投射它。
最后,您的Item
对象被视为Object
,并在Item
方法中投放回compareTo()
。
答案 3 :(得分:0)
传递给compareTo方法的Object是一个Item对象。当你实现它时,Arrays.sort()调用Overrided方法,最好的实现是返回原始java类型的compareTo方法
@Override
public int compareTo(Object o){
return (this.getNumber().compareTo((Item)o.getNumber());
}
(这要求您将数字设为Integer类型)