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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tanzhiqiu 初级黑马   /  2013-7-22 11:07  /  1517 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-23 16:31 编辑

请设计一个具备比较功能的类(例如 员工类, 需要有姓名, 年龄, 薪水三个成员属性需要私有并提供get, set方法, 可以通过构造函数进行初始化,并且按照薪水进行排序
import java.util.*;
class  Test7
{
        public static void main(String[] args)
        {
                TreeSet<Woker> tm = new TreeSet<Woker>();

                tm.add(new Woker("张三",23,5000));
                tm.add(new Woker("李四",21,4000));
                tm.add(new Woker("网的",24,5000));
                tm.add(new Woker("读书手",22,3500));
                tm.add(new Woker("低声说",22,4500));

               
                Iterator<Woker> it = tm.iterator();
                while(it.hasNext())
                {
                        Woker stu = (Woker)it.next();
                        System.out.println(stu.getName()+"..."+stu.getAge()+"..."+stu.getPay());
                }
        }
}
class StuPayComparator implements Comparator<Woker>
{
        public int compare(Woker s1,Woker s2)
        {
                int num = s1.getName().compareTo(s2.getName());
                if(num==0)
                        return new Integer(s1.getPay()).compareTo(new Integer(s2.getPay()));

                return num;
        }
}
class Woker implements Comparable<Woker>
{
        private String name;
        private int age;
        private int pay;
        Woker(String name,int age,int pay)
        {
                this.name = name;
                this.age = age;
                this.pay=pay;
        }
        
        public int compareTo(Woker w)
        {
                if(this.pay>w.pay)
                        return 1;
                if(this.age==w.age)
                {
                        return this.name.compareTo(w.name);
                }
                return -1;
        }

        public String getName()
        {
                return name;
        }
        public void setName(String name)
        {
                this.name=name;
        }
        public int getPay()
        {
                return pay;
        }
        public int getAge()
        {
                return age;
        }
        public void setAge(int age)
        {
                this.age=age;
        }
        public String toString()
        {
                return name+":"+age+":"+pay;
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

1 个回复

倒序浏览
kTreeSet有两种排序方式,第一种方式:让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式。定义比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。但当两种排序都存在时,以比较器为主。在楼主的代码Woker类的compareTo(Woker w)方法中,有条语句是if(this.age == w.age)不妥,这与上面的判断语句if(this.pay >w.pay)不对应,且与题目要求不符。 应将其改为if(this.pay == w.pay)。在定义比较器类时,也没有按照薪水进行排序。应定义StuPayComparator如下:
class StuPayComparator implements Comparator<Woker>
{
        public int compare(Woker s1,Woker s2)
        {
                int num =new Integer(s1.getPay()).compareTo(new Integer(s2.getPay()));
                if(num == 0)
                        return s1.getName().compareTo(s2.getName());
                return num;
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马