站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题MapTreeSet,急!!!小弟跪求答案~~~。

MapTreeSet,急!!!小弟跪求答案~~~。

摘要: MapTreeSet,急!!!小弟跪求答案~~~。


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


用TreeMap才能够实现你得需求


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


根据什么排序就以什么来做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);
.....................




然后你再取出来就是排好序的了


最大值,最小值你可以取第一个和最后一个的值


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.



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



JF


Student.java

package 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.java

package net.mengfanpp;

import java.util.Comparator;

/**
* @author mengfanpp
*
*/
public class StudentComparator implements Comparator {

/* (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.java

package 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 comparator = new StudentComparator();
Set set = new TreeSet(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();

}

}




又见梦凡~~~


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


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(); //




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);

就得到了你说要的结果


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


↑返回目录
前一篇: 如何让图片显示在JButton上
后一篇: TreeSet中的元素的排列问题?