Map t=new HashMap();
Student astu1=new Student();
//...实例化三个Student对象
t.put("1", astu1);
t.put("2", astu2);
t.put("3", astu3);
如何将他们排序放到TreeSet中。
能提供一些全点的TreeSet的方法吗?
小弟刚入门,万分感谢!

解决方案 »

  1.   

    为什么?
    补充一下。
    Student 有三个属性,一个ID,一个Name,一个Grade。我想用TreeSet来排序,并求出所有Grade的最大值和最小值。
      

  2.   

    根据什么排序就以什么来做key,比如id,name:
    TreeMap t=new TreeMap();
    Student astu1=new Student();
    //...实例化三个Student对象,id排序
    t.put("1", astu1);
    t.put("2", astu2);
    t.put("3", astu3);
    //...实例化三个Student对象,name排序
    t.put("name1", astu1);
    t.put("name2", astu2);
    t.put("name3", astu3);
    .....................
      

  3.   

    HashMap中的原话,这类问题应该查阅文档。
    This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time. 
      

  4.   

    你应该看看util包对Collection Set List Map 接口的描述
    你要求的是类似数据库中表的功能,这应该是Key-Value的一种扩展,所以最符合你的要求的实际JFC中的类应该是实现了Map接口的类,以下都是,哪个最符合你的要求,应该因需而选了
    AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap 
      

  5.   

    Student.javapackage net.mengfanpp;import java.util.Calendar;/**
     * 学生类
     * 
     * @author mengfanpp
     * 
     */
    public class Student { private String id; private String name; private Boolean sex; private Calendar birthday;

    /**
     * 学生类简单构造函数
     */
    public Student() {
    super();
    // TODO Auto-generated constructor stub
    } /**
     * @return Returns the birthday.
     */
    public Calendar getBirthday() {
    return birthday;
    } /**
     * @param birthday
     *            The birthday to set.
     */
    public void setBirthday(Calendar birthday) {
    this.birthday = birthday;
    } /**
     * @return Returns the id.
     */
    public String getId() {
    return id;
    } /**
     * @param id
     *            The id to set.
     */
    public void setId(String id) {
    this.id = id;
    } /**
     * @return Returns the name.
     */
    public String getName() {
    return name;
    } /**
     * @param name
     *            The name to set.
     */
    public void setName(String name) {
    this.name = name;
    } /**
     * @return Returns the sex.
     */
    public String getSex() {
    return sex == true ? "男":"女";
    } /**
     * @param sex
     *            The sex to set.
     */
    public void setSex(Boolean sex) {
    this.sex = sex;
    } //在定义类时,最好总是重新定义equals()与hashCode()方法以及toString(),以符合Java的设计规范。

    /* (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object other) {
    // TODO Auto-generated method stub
    if(this == other)
    return true;

    if(!(other instanceof Student))
    return false;

    final Student stud = (Student) other;

    if(!id.equals(stud.getId())){
    return false;
    }

    return true;
    } /* (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
    // TODO Auto-generated method stub
    return id.hashCode();
    } /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
    // TODO Auto-generated method stub
    StringBuilder studInfo = new StringBuilder("");
    studInfo.append("学号:"+id+" 的学生姓名为:"+name+",性别为:"+this.getSex()+",出生日期为:"+DateInfo.getStrFromDateTime(birthday,"yyyy-MM-dd") );

    return studInfo.toString();
    }}
    StudentComparator.javapackage net.mengfanpp;import java.util.Comparator;/**
     * @author mengfanpp
     *
     */
    public class StudentComparator<T> implements Comparator<Student> { /* (non-Javadoc)
     * @see java.util.Comparator#compare(T, T)
     */
    public int compare(Student arg0, Student arg1) {
    // TODO Auto-generated method stub

    //按学号正序排列
    //return arg0.getId().compareTo(arg1.getId());

    //按出生日期正序排列
    //return arg0.getBirthday().compareTo(arg1.getBirthday())

    //按出生日期倒序排列
    return arg0.getBirthday().compareTo(arg1.getBirthday()) * -1;
    }
    }
    TreeSetDemo3.javapackage net.mengfanpp;import java.util.TreeSet;
    import java.util.Set;
    import java.util.Comparator;/**
     * 练习使用TreeSet,主要练习了排序(StudentComparator定义了排序规则)
     * 
     * @author mengfanpp
     * 
     */
    public class TreeSetDemo3 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Comparator<Student> comparator = new StudentComparator<Student>();
    Set<Student> set = new TreeSet<Student>(comparator);

    Student stud1 = new Student();
    Student stud2 = new Student();
    Student stud3 = new Student();
    //Student stud4 = new Student(); stud1.setId("002");
    stud1.setName("张三");
    stud1.setSex(true);
    stud1.setBirthday(DateInfo.getDateTimeFromStr("1979-03-12","yyyy-MM-dd")); stud2.setId("001");
    stud2.setName("李斯");
    stud2.setSex(true);
    stud2.setBirthday(DateInfo.getDateTimeFromStr("1980-05-16","yyyy-MM-dd")); stud3.setId("003");
    stud3.setName("良葛格");
    stud3.setSex(true);
    stud3.setBirthday(DateInfo.getDateTimeFromStr("1975-08-10","yyyy-MM-dd"));
    set.add(stud1);
    set.add(stud2);
    set.add(stud3); // 使用增强的for循环显示对象
    for (Student stud : set) {
    System.out.println(stud.toString() + " ");
    }
    System.out.println(); }}
      

  6.   

    请问,取第一个和最后一个是不是用first()和last(),他们返回类型是object。但是我要的是Student,该怎么办?
    con是Map的实例对象。
    Collection emps=con.values();
    Student max=(Student) ((TreeSet) emps).first();
    System.out.println(max.Grade);
    输出要报错。(Grade是Student的属性,double型)
      

  7.   

    System.out.println(max.Grade.toString());一般:private String grade;public double getGrade(){
        return this.grade;
    }public void setGrade(double grade){
        this.grade = grade;
    }Student stud = new Student();
    stud.getGrade();  //
      

  8.   

    public void MyComparator implements Comparator {    private String sortfield;        public MyComparator(String sortfield) {
            this.sortfield = sortfield;
        }       public int compare(Object o1,Object o2) {
            //利用反射得到sortfield的值,然后比较,返回true or false
        }
    }最后这样排序Collections.sort(List list,Comparator comparator);就得到了你说要的结果
      

  9.   

    还是没搞懂,唉~结帖吧,感谢各位。我QQ是70240274在校大一学生,谁能帮我,我甘愿叫他Java师傅,呵呵。