举个例子,定义一个学生类,有姓名和年龄,如果前期编写代码是按照年龄排序用的是实现Comparable接口,并覆盖其中的compareTo方法,但是过了一段时间之后你又想按照姓名来排序,为了不更改代码,这个时候可以自己定义一个比较器实现Comparator接口,并覆盖其中的compare方法,把比较器作为参数传给TreeSet集合,如果两种比较方式都存在的情况下,以自定义比较器为先。
虽说set集合是无序的,但是TreeSet集合是按照二叉树的顺序。
可以使Set集合存入顺序和取出的顺序一致,代码如下- import java.util.Iterator;
- import java.util.TreeSet;
- public class TreeSetDemo {
- public static void main(String[] args){
- TreeSet<Person> ts = new TreeSet<Person>();
- ts.add(new Person("zhangsan1",25));
- ts.add(new Person("zhangsan2",22));
- ts.add(new Person("zhangsan3",21));
- ts.add(new Person("zhangsan4",26));
-
- Iterator<Person> it = ts.iterator();
- while(it.hasNext()){
- Person p =it.next();
- System.out.println(p.getName()+".."+p.getAge());
-
- }
- }
- }
- class Person implements Comparable
- {
- private String name;
- private int age;
- public int compareTo(Object obj){
- return 1;
-
- }
- Person(String name,int age){
- this.name = name;
- this.age = age;
- }
- 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;
- }
- }
复制代码 |