接上文,我们说了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;
}
}