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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈延真 中级黑马   /  2013-5-27 21:26  /  1103 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈延真 于 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);
  }
}
}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

3 个回复

倒序浏览
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);
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
name是String类型的。String类实现了Comparable接口。

只需要用int tmp = s1.name.lenth()-s2.name.lenth();//进行姓名长度比较。返回一个int类型的值
return tmp = 0? s1.age-s2.age:tmp; //如果长度相同,按照年龄排序。否则直接返回

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
陈潜 发表于 2013-5-27 22:36
class Demo {
        public static void main(String[] args) {
                // 创建集合对象

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