黑马程序员技术交流社区

标题: 比较器中如何体现才能实现这一需求? [打印本页]

作者: 陈延真    时间: 2013-5-27 21:26
标题: 比较器中如何体现才能实现这一需求?
本帖最后由 陈延真 于 2013-5-30 21:27 编辑

  要求:同姓名同年龄即为同一个人。
           请按照姓名的长度从短到长,如果长度一样,请按年龄从大到小排序。

class TreeMapDemo {
public static void main(String[] args) {
  // 创建集合对象
  TreeMap<Student, String> hm = new TreeMap<Student, String>(new Comparator<Student>() {
   @Override
   public int compare(Student s1, Student s2) {
    if(s1.getName().equals(s2.getName())){
     return 0;
    }else{
     int num = s1.getName().length()-s2.getName().length();
     int num2 = (num == 0) ? s2.getAge()-s1.getAge(): num;  
     
    }
    return num2;
         
   }
  });
  // 创建元素对象
  Student s1 = new Student("lingqingxia", 25);
  Student s2 = new Student("linzhiling", 35);
  Student s3 = new Student("linxinru", 45);
  Student s4 = new Student("lingqingxia", 25);
  Student s5 = new Student("linzixiang", 55);
  Student s6 = new Student("linzixianx", 55);
  
  // 添加元素
  hm.put(s1, "北京");
  hm.put(s2, "上海");
  hm.put(s3, "天津");
  hm.put(s4, "湖北");
  hm.put(s5, "重庆");
  // 遍历
  Set<Student> set = hm.keySet();
  for (Student key : set) {
   String value = hm.get(key);
   System.out.println(key.getName() + "***" + key.getAge() + "***"
     + value);
  }
}
}


作者: 陈潜    时间: 2013-5-27 22:36
class Demo {
        public static void main(String[] args) {
                // 创建集合对象
                TreeMap<Student, String> hm = new TreeMap<Student, String>(
                                new Comparator<Student>() {
                                        @Override
                                        public int compare(Student s1, Student s2) {
                                                if (s1.getName().equals(s2.getName()) && s1.getAge()==s2.getAge()) {        //同姓名同年龄即为同一个人,你没有加年龄
                                                        return 0;
                                                } else {
                                                        if(s1.getName().length()- s2.getName().length() != 0)        //先判断名字长度
                                                                return s1.getName().length()- s2.getName().length();
                                                        else{                        //如果相同就判断年龄大小
                                                                return s2.getAge() - s1.getAge();
                                                        }
                                                }
                                        }
                                });
                // 创建元素对象
                Student s1 = new Student("lingqingxia", 25);
                Student s2 = new Student("linzhiling", 35);
                Student s3 = new Student("linxinru", 45);
                Student s4 = new Student("lingqingxia", 25);
                Student s5 = new Student("linzixiang", 55);
                Student s6 = new Student("linzixianx", 55);        //这个没放啊。。定义了干吗?

                // 添加元素
                hm.put(s1, "北京");
                hm.put(s2, "上海");
                hm.put(s3, "天津");
                hm.put(s4, "湖北");
                hm.put(s5, "重庆");
                // 遍历
                Set<Student> set = hm.keySet();
                for (Student key : set) {
                        String value = hm.get(key);
                        System.out.println(key.getName() + "***" + key.getAge() + "***"
                                        + value);
                }
        }
}
作者: Super_Class    时间: 2013-5-28 08:45
name是String类型的。String类实现了Comparable接口。

只需要用int tmp = s1.name.lenth()-s2.name.lenth();//进行姓名长度比较。返回一个int类型的值
return tmp = 0? s1.age-s2.age:tmp; //如果长度相同,按照年龄排序。否则直接返回
作者: 陈延真    时间: 2013-5-28 20:48
陈潜 发表于 2013-5-27 22:36
class Demo {
        public static void main(String[] args) {
                // 创建集合对象

失误,失误,哈哈。




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