接上文,我们说了Compareable的使用与实例,接下来介绍 compatartor 的使用方法与实例
compatartor 和Compareable不同,你不用去修改你要排序的类的代码来实现Compareable接口,如果你不想修改你先排序的类的代码
你就可以用 Comparator
首先来创建一个TestTreeSet1类来测试。第一步.创建一个实现了Comparator接口的类对象
第二步.将此对象作为形参传递给TreeSet的构造器中。
再创建一个Customer类,这是我们要排序的类,是我们在Comparator接口中的compare方法中涉及的对象。你想给哪个对象排序你就得在compare方法中“声明”出来。
然后我们运行TestTreeSet1
可以看到结果也是根据你在compare方法中指定的规则排序的。
不懂的可以私信我哦,也可以拷贝我的代码来实验一下。
public class Customer {
Integer age;
String name;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Customer other = (Customer) obj;
if (age == null) {
if (other.age != null)
return false;
} else if (!age.equals(other.age))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public Customer(Integer age, String name) {
super();
this.age = age;
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((age == null) ? 0 : age.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public String toString() {
return "Customer [age=" + age + ", name=" + name + "]";
}
}
import java.util.Comparator;
import java.util.TreeSet;
/*
* TreeSet定制排序
*/
public class TestTreeSet1 {
//2.将此对象作为形参传递给TreeSet的构造器中
public static void main(String[] args) {
Com com=new Com();
TreeSet set=new TreeSet(com);
//只能添加实现了Comparator接口中的compare方法中涉及的对象
set.add(new Customer(1005,"ll"));
set.add(new Customer(1006,"tt"));
set.add(new Customer(1001,"gg"));
set.add(new Customer(1001,"bb"));
set.add(new Customer(1006,"ae"));
set.add(new Customer(1008,"ac"));
for(Object i:set) {//for循环输出set的对象
System.out.println(i);
}
}
}
//1.创建一个实现了Comparator接口的类对象
class Com implements Comparator{
//重写compare 方法
@Override
public int compare(Object o, Object l) {
if(o instanceof Customer&&l instanceof Customer) {
Customer o1=(Customer)o;
Customer l1=(Customer)l;
int i=o1.age.compareTo(l1.age);//先看年龄 再看名字
if(i==0) {
return o1.name.compareTo(l1.name);
}
return i;
}
return 0;
}
}