黑马程序员技术交流社区

标题: TreeSet集合排序第二种方式 [打印本页]

作者: 小p    时间: 2015-7-25 21:33
标题: TreeSet集合排序第二种方式
import java.util.*;
/*
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。

当两种排序都存在时,以比较器为主。

定义一个类,实现Comparator接口,覆盖compare方法。
以return
*/
class Student implements Comparable//让学生具备比较性
{
        private String name;
        private int age;

        Student(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
        public int compareTo(Object obj)
        {
                if(!(obj instanceof Student))
                        throw new RuntimeException("不是学生对象");

                Student s = (Student) obj;

                if(this.age>s.age)
                        return 1;
                if(this.age==s.age)
                        return this.name.compareTo(s.name);
                return -1;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}


class  TreeSetDemo2
{
        public static void main(String[] args)
        {
                TreeSet ts = new TreeSet(new MyCompare());

                ts.add(new Student("lisi02",20));
                ts.add(new Student("lisi01",20));
                ts.add(new Student("lisi05",25));
                ts.add(new Student("lisi06",19));
                //ts.add(new Student("lisi07",17));

                Iterator it = ts.iterator();
                while(it.hasNext())
                {
                        Student stu = (Student)it.next();
                        System.out.println(stu.getName()+"....."+stu.getAge());
                }
        }
}

class MyCompare implements Comparator
{
        public int compare (Object o1,Object o2)
        {
                //类型强转
                Student s1 = (Student)o1;
                Student s2 = (Student)o2;
               
                int num=return s1.getName().compareTo(s2.getName());
                if(num==0)
                {
                        return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
                }
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2