A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 盛亚昆 中级黑马   /  2012-3-19 14:41  /  2076 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;

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;
                //System.out.println(this.name+"....coparable...."+s.name);
                if (this.age>s.age)
                return 1;
                if (this.age==s.age)//当姓名不相同 而年龄相同了,是不是一个人啊,所以要判断姓名再String中有comparaTo功能,按字典排序
                {
                        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();//第一种进行元素排序了   往TreeSet里存数据必须数据要有比较性
                                 ???     TreeSet ts = new TreeSet(new MyCompare());//第二种方法,这个地方传人的 MyCompare怎么理解啊,拆开写怎么写啊?糊涂了
                ts.add(new Student("lisi01",28));
                ts.add(new Student("lisi02",25));
                ts.add(new Student("lisi03",19));
                ts.add(new Student("zhangsan",19));

                Iterator it = ts.iterator();
                while (it.hasNext())
                {
                        Student stu=(Student)it.next();//                强转调用特有方法
                        //System.out.println(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=s1.getName().compareTo(s2.getName());//比较字符串
        if (num==0)
        {
                if(s1.getAge()>s2.getAge())
                        return 1;
                if(s1.getAge()== s2.getAge())
                        return 0;

                        return -1;
               
        }
        return num;
        }
}

2 个回复

正序浏览
int num=s1.getName().compareTo(s2.getName());// 如果这里比较的是double类型的 还能用int num吗?
回复 使用道具 举报
匿名比较器对象参数传进去做构造函数的参数让主类具有可比性,如果用了这个就优先调用这个的 比comparable区别:第一种是让元素具有比较性 第2种时候让集合具有比较
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马