java的Collection或Map实现元素自动排序

java的Collection或Map如何使他们里面的元素自动排序呢,

虽然是老早学习的java内容了,想不到面试官也稍微问了我一下,那时候没复习到这,只是答一半漏一半。

现在做个备忘。

/*
 * 需求:
 * 往自定义集合中存入对象,按先年龄后姓名的从小到大的方式排序。
 *
 * 思路:
 * 方法一:需要通过对象所在类实现Comparable接口,再复写其中compareTo方法
 * 方法二:当元素自身不具备比较性,或者具备的比较性不是所需要的,可使用比较器Comparator
 * 覆盖里面的compare方法。
 *
 * 此示范中两种方法都包含了*/
import java.util.*;
/*
public class TreeSetTest {
    public static void main(String[] args) {
        TreeSet ts = new TreeSet();
        
        ts.add("adcd");
        ts.add("accd");
        ts.add("Adcd");
        
        Iterator it = ts.iterator();
        while(it.hasNext())
            System.out.println(it.next());
    }
}
*/

public class TreeSetTest {
    public static void main(String[] args) {
        TreeSet ts = new TreeSet(new MyCompare());
        ts.add(new Teacher("lisi01",11));
        ts.add(new Teacher("lisi02",12));
        ts.add(new Teacher("lisi03",13));
        ts.add(new Teacher("lisi03",11));
        ts.add(new Teacher("lisi01",11));
        
        Iterator it = ts.iterator();
        while(it.hasNext()) {
            Teacher t =(Teacher)it.next();
            System.out.println(t.getName()+":::"+t.getAge());
        }
    }
}


class MyCompare implements Comparator {        //方法二:排序:先姓名后年龄。
    public int compare(Object o1,Object o2) {
        Teacher t1 = (Teacher)o1;
        Teacher t2 = (Teacher)o2;
        int num = t1.getName().compareTo(t2.getName());
        if(num==0) {
            /*
            if(t1.getAge()>t2.getAge())
                return 1;
            if(t1.getAge()==t2.getAge())
                return 0;
            else
                return -1;
            */
            //因为整数也有自己的比较方法,可以用以下方法替代上面方法。
            
            return new Integer(t1.getAge()).compareTo(new Integer(t2.getAge()));
            //此处将整数类型封装成Integer对象得以调用compareTo方法。
        }
        return num;
    }
}

class Teacher implements Comparable {
    private String name;
    private int age;
    private Teacher s;
    
    Teacher(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public int compareTo(Object obj) {        //方法一:排序:先年龄后姓名
        if(!(obj instanceof Teacher))
            throw new RuntimeException("该对象不是老师");
        else
            s = (Teacher)obj;
        if(this.age>s.age)
            return 1;
        else if(this.age==s.age)
            return this.name.compareTo(s.name);  //此处调用compareTo方法是字符串原有的。
        else
            return -1;
    }
}

猜你喜欢

转载自blog.csdn.net/a5552157/article/details/78671985