TreeSet对元素进行比较,我让元素自身具备了比较功能
我实现了Comparable接口里,并覆盖compareTo方法,不明白的是compareTo返回一个int型的数值有什么用?
是怎么根据这个返回值类型进行排序的?
public class Person implements Comparable
{
private int age;
private String name;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String getname()
{
return name;
}
public int getage()
{
return age;
}
public int hashCode()
{
return name.hashCode()+age;
}
public boolean equals(Object obj)
{
Person ob = (Person)obj;
return this.name == ob.name && this.age == ob.age;
}
public int compareTo(Object obj)
{
System.out.println("obj...aaaaa");
Person p = (Person)obj;
int tim = this.age-p.age;
return tim==0?this.name.compareTo(p.name):tim;
}
}
===================================================================================疑惑2:
为了让集合自身具备比较方法,另外定义了一个类实现comparator接口,将该类对象作为参数传递给TreeSet集合的构造函数,comparator有两个方法:compare和equals
为什么我只覆盖了compare而已,但却能通过编译却程序没有问题?
接口中的方法不用全部覆盖么?
import java.util.Comparator;
public class ComparaByage implements Comparator
{
public int compare(Object xx,Object oo)
{
Person p1 = (Person)xx;
Person p2 = (Person)oo;
int tim =p1.getage() - p2.getage();
return tim==0?p1.getname().compareTo(p2.getname()):tim;
}
}
我实现了Comparable接口里,并覆盖compareTo方法,不明白的是compareTo返回一个int型的数值有什么用?
是怎么根据这个返回值类型进行排序的?
public class Person implements Comparable
{
private int age;
private String name;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String getname()
{
return name;
}
public int getage()
{
return age;
}
public int hashCode()
{
return name.hashCode()+age;
}
public boolean equals(Object obj)
{
Person ob = (Person)obj;
return this.name == ob.name && this.age == ob.age;
}
public int compareTo(Object obj)
{
System.out.println("obj...aaaaa");
Person p = (Person)obj;
int tim = this.age-p.age;
return tim==0?this.name.compareTo(p.name):tim;
}
}
===================================================================================疑惑2:
为了让集合自身具备比较方法,另外定义了一个类实现comparator接口,将该类对象作为参数传递给TreeSet集合的构造函数,comparator有两个方法:compare和equals
为什么我只覆盖了compare而已,但却能通过编译却程序没有问题?
接口中的方法不用全部覆盖么?
import java.util.Comparator;
public class ComparaByage implements Comparator
{
public int compare(Object xx,Object oo)
{
Person p1 = (Person)xx;
Person p2 = (Person)oo;
int tim =p1.getage() - p2.getage();
return tim==0?p1.getname().compareTo(p2.getname()):tim;
}
}
0表示一样大,负数表示小于,正数表示大于关于只实现一个,我想是ComparaByage类已经拥有了继承自Object的equals实现版本,所以没有自行覆盖的话不再强制了
?
这句没能理解能否通俗点讲,或者搞个小例子给我撸一撸