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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李前进 中级黑马   /  2014-3-30 16:36  /  846 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;
  2. /*

  3. 需求:
  4.         往TreeSet集合中存储自定义对象学生
  5.         想按照学生的年龄进行排序

  6. */



  7. class TreeSetDemo
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 TreeSet ts = new TreeSet();

  12.                 ts.add(new Student("lisi02",22));
  13.                 //ts.add(new Student("lisi03",23));
  14.                 //ts.add(new Student("lisi04",24));
  15.                 //ts.add(new Student("lisi05",25));

  16.                 Iterator it = ts.iterator();
  17.                 while(it.hasNext())
  18.                 {
  19.                         Student stu = (Student)it.next();
  20.                         System.out.println(stu.getName()+"...."+stu.getAge());
  21.                 }
  22.         }
  23. }


  24. class Student
  25. {
  26.         private String name;
  27.         private int age;

  28.         Student(String name,int age)
  29.         {
  30.                 this.name = name;
  31.                 this.age = age;
  32.         }

  33.         public String getName()
  34.         {
  35.                 return name;
  36.         }

  37.         public int getAge()
  38.         {
  39.                 return age;
  40.         }

  41. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
只要使用TreeSet 或者TreeMap 就必须要有比较

要么让Student 实现Comparable
要么自定义一个比较器实现Comparator
回复 使用道具 举报
osully 发表于 2014-3-30 16:38
只要使用TreeSet 或者TreeMap 就必须要有比较

要么让Student 实现Comparable

可是只有一个元素,和谁比较啊?而且,毕老师的第14天演示视频,第二个,第五分钟整的时候,就可以顺利运行了啊
回复 使用道具 举报
听我的 去尝试下吧
回复 使用道具 举报
osully 发表于 2014-3-30 16:58
听我的 去尝试下吧

好的!我再试试。
回复 使用道具 举报
你将Student存入TreeSet集合中就必须得让Student具有比较性,或者TreeSet集合自身具有比较性;
这里我让Student具备比较性,将Student中的代码做了一下修改,就可以按照学生的年龄来排序了。
  1. import java.util.*;

  2. public class Test02
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 TreeSet ts = new TreeSet();

  7.                 ts.add(new Student("lisi03",23));
  8.                 ts.add(new Student("lisi02",22));
  9.                 ts.add(new Student("lisi05",25));
  10.                 ts.add(new Student("lisi04",24));

  11.                 Iterator it = ts.iterator();
  12.                 while(it.hasNext())
  13.                 {
  14.                         Student stu = (Student)it.next();
  15.                         System.out.println(stu.getName()+"...."+stu.getAge());
  16.                 }
  17.         }
  18. }


  19. class Student implements Comparable  //要让student具有比较性所以要让Student实现Comparable借口;
  20. {
  21.         private String name;
  22.         private int age;

  23.         Student(String name,int age)
  24.         {
  25.                 this.name = name;
  26.                 this.age = age;
  27.         }

  28.         public String getName()
  29.         {
  30.                 return name;
  31.         }

  32.         public int getAge()
  33.         {
  34.                 return age;
  35.         }

  36.                 @Override
  37.                 public int compareTo(Object obj) {  //覆盖Comparable接口中的compareTo方法;
  38.                         Student stu = (Student) obj;
  39.                         int num = new Integer(this.age).compareTo(new Integer(stu.age));  //TreeSet集合会根据返回的num的值得大小来将Student排序;
  40.                         if(num ==0)   //当num等于0时,也就是Student的age相等时,再根据学生的姓名排序;
  41.                                 return this.name.compareTo(stu.name);
  42.                         return num;
  43.                 }         
  44. }
复制代码



评分

参与人数 2技术分 +1 黑马币 +9 收起 理由
枫儿 + 1 赞一个!
李前进 + 9 很给力!

查看全部评分

回复 使用道具 举报 1 0
//TreeSet<>集合要类具有比较性,或传一个比较器.
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

class TreeSetDemo
{
        public static void main(String[] args)
        {
                //让类自已具有比较性
             //   TreeSet ts = new TreeSet();
                TreeSet ts = new TreeSet(new Mycomparator());
              //用比较器
                ts.add(new Student("lisi02",22));
                ts.add(new Student("lisi03",23));
                ts.add(new Student("lisi04",24));
               ts.add(new Student("lisi05",25));

                Iterator it = ts.iterator();
                while(it.hasNext())
                {
                        Student stu = (Student)it.next();
                        System.out.println(stu.getName()+"...."+stu.getAge());
                }
        }
}
//用比较器
class Mycomparator implements Comparator<Student>
{
        @Override
        public int compare(Student o1, Student o2) {
                // TODO Auto-generated method stub
                  int rel=o1.getAge()-o2.getAge();
                  if(rel==0)
                          return o1.getName().compareTo(o2.getName());
                  return rel;
        }
}

//让类自已具有比较性
class Student implements Comparable<Student>
{
          @Override
          public int compareTo(Student o)
          {            
                  int rel=this.age-o.age;
                  if(rel==0)
                          return this.name.compareTo(o.name);
                  return rel;
          };
          
       
        private String name;
        private int age;

        Student(String name,int age)
        {
                this.name = name;
                this.age = age;
        }

        public String getName()
        {
                return name;
        }

        public int getAge()
        {
                return age;
        }

}

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

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