假设我在Main中创建了两个对象,通过相同的构造函数,包含相同类型的5个整数。
Secondclass mp1 = new Secondclass ( 0 , 1 , 2 , 3 , 4 );
Secondclass mp2 = new Secondclass ( 5 , 6 , 7 , 8 , 9 );
在我的Secondclass
我有一个名为Comparing
的方法,我希望传递这两个对象并比较一些整数,有点像这样:
mp1.Comparing(mp1,mp2);
这在Java中是否可行?
我是编程新手,我希望我足够清楚。
答案 0 :(得分:0)
您可以实施Comparator
public SecondClassComparator implements Comparator<SecondClass> {
public int compare (SecondClass c1, SecondClass c2) {
// Do some comparision
}
}
答案 1 :(得分:0)
Java具有Comparator(http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html)接口。您可以在SecondClass类中实现比较器接口。
object1.compare(object1, object2)
但由于object1数据已经可用,我更愿意实现可比较的(http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html)接口。
您可以在java中使用equals方法时使用它
object1.compareTo(object2)
答案 2 :(得分:0)
公约规定您要在int compareTo(SecondClass other)
中定义方法SecondClass
,以便o1.compareTo(o2)
返回
为了更简单的示例,我们假设SecondClass
只有一个int,即字段value
。然后它可以实现如下:
public int compareTo(SecondClass other) {
return this.value - other.value;
}
如果您这样做,您可以(而且应该)制作SecondClass
工具Comparable
。
此外,您应该确保o1.compareTo(o2) == 0
当且仅当o1.equals(o2)
时,请确保您实现了正确的equals方法。在示例中,它可能如下所示:
public boolean equals(Object other) {
(if other == null || !(other instanceof SecondClass))
return false;
else
return this.value == ((SecondClass) other).value;
}
(当然,您也可以使用compareTo,将return语句替换为return compareTo((SecondClass) other) == 0
。
最后但并非最不重要的是,如果您覆盖equals
方法,请务必同时覆盖hashCode
,这样如果您的类的两个实例相同,则它们具有相同的哈希码。在示例中,您可以简单地使用整数值:
public int hashCode() {
return value;
}
public class SecondClass implements Comparable<SecondClass> {
private int value;
public int compareTo(SecondClass other) {
return this.value - other.value;
}
public boolean equals(Object other) {
(if other == null || !(other instanceof SecondClass))
return false;
else
return this.value == ((SecondClass) other).value;
}
public int hashCode() {
return value;
}
}
这就是你需要做的一切。