Comparator是一个接口,它包含两种方法
int compare(T o1, T o2);
boolean equals(Object obj);
一个类要实现Comparator接口,可以只实现compare函数,因为任何类,默认都是已经实现了equals(Object obj)的。
public boolean equals(Object obj) {
return (this == obj);
}
创建对象调用compara函数
public class practice1 implements Comparator {
private String name;
private int age;
public practice1 () {
}
public String getName () {
return name;
}
public void setName ( String name ) {
this.name = name;
}
public int getAge () {
return age;
}
public void setAge ( int age ) {
this.age = age;
}
public practice1 ( String name, int age ) {
this.name = name;
this.age = age;
}
@Override
public String toString () {
return "practice1{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compare ( Object o1, Object o2 ) {
practice1 s1 = (practice1) o1;
practice1 s2 = (practice1) o2;
//先比较姓名。
int temp = s1.getName().compareTo(s2.getName());
//如果姓名相同,再比较年龄。
return temp == 0 ? s1.getAge() - s2.getAge() : temp;
}
}
进行储存
public class demo02 {
public static void main ( String[] args ) {
Set set = new TreeSet(new practice1());
/*
*
*/
set.add(new practice1("张三",22));
set.add(new practice1("王五",21));
set.add(new practice1("刘三",20));
set.add(new practice1("李四",24));
for (Iterator it = set.iterator(); it.hasNext();) { //打印出每一个元素
System.out.println(it.next());
}
}
}
输出结果
practice1{name='刘三', age=20}
practice1{name='张三', age=22}
practice1{name='李四', age=24}
practice1{name='王五', age=21}
Comparator 和 Comparable 比较:
1.Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
(作用在实体类上)
2.而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
(作用在排序类上)
总结:Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。
内部比较器:简洁,简单
外部比较器:同时定义多个实体类的比较规则,也可以定义多个比较器,从不同的维度比较某个实体类。