集合练习。学生信息包括学号、姓名、出生日期、性别。把N个学生的信息放入一个集合中。可以根据学号,对学生信息进行检索。并可以根据生日进行排序输出。
Student.java
package CollectionText;import java.util.Date;public class Student implements Comparable<Student> {@Overridepublic int compareTo(Student o) {return this.id - o.id;}private int id;private String name;private Date brithday;private String sex;public String getName() {return name;}@Overridepublic int hashCode() {return this.id;}@Overridepublic boolean equals(Object obj) {Student s = (Student) obj;return this.id == s.id;}public void setName(String name) {this.name = name;}public Date getBrithday() {return brithday;}public void setBrithday(Date brithday) {this.brithday = brithday;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public void setId(int id) {this.id = id;}@Override//public String toString() {return "学号:" + id + "\t姓名 :" + name + "\t性别:" + sex + "\t\t生日:" + brithday;}public Integer getId() {return id;}}
=================================================================================================================================
StuMsg.java
package CollectionText;import java.util.Date;import java.util.Map;import java.util.Random;import java.util.TreeMap;import java.util.TreeSet;public class StuMsg {TreeMap<Integer, Student> stu_map = new TreeMap<Integer, Student>();private Random r = new Random();// 定义学号集合。// 初始化 学生集合。public void initialization(int stuNum) {for (int i = 0; i < stuNum; i++) {Student p = new Student();p.setId(i);p.setName("name" + i);p.setBrithday(new Date((long) (System.currentTimeMillis() - (long) (360 * 24 * 3600 * 1000)* r.nextInt(1000))));p.setSex(r.nextInt(100) % 2 == 0 ? "女" : "男");stu_map.put(p.getId(), p);}}// 打印 学生集合。public void disPlay(TreeMap<Integer, Student> stu_map) {for (Map.Entry<Integer, Student> me : stu_map.entrySet()) {// Integer key = me.getKey();Student value = me.getValue();System.out.println(value);}}/*** 使用TreeSet存储返回的排好序的学生集合。因为TreeSet在添加对象时根据对象的Comparable方法会自动排好序。* * @param stuMap* @return*/// 根据学生的生日,对学生进行排序。并存在TreeSet中。public TreeSet<Student> sort(TreeMap<Integer, Student> stuMap) {TreeSet<Student> temp = new TreeSet<Student>(new SortByBrithday());for (int i = 0; i < stuMap.size(); i++) {temp.add(stuMap.get(i));// 添加元素。}return temp;}// 根据学号进行检索函数。public Student getId(int key) {return this.stu_map.get(key);}}
SortByBrithday.java(比较器)
package CollectionText;import parator;/*** 根据生日的排序器。* @author Administrator**/public class SortByBrithday implements Comparator<Student> {@Overridepublic int compare(Student o1, Student o2) {return o1.getBrithday().compareTo(o2.getBrithday());}}
主类CollectionTest.java
package CollectionText;import java.util.TreeSet;public class CollectionTest {public static void main(String[] args) {TreeSet<Student> al = new TreeSet<Student>();StuMsg sm = new StuMsg();sm.initialization(6);sm.disPlay(sm.stu_map);System.out.println("++++++++++++++++++++++++++++++++++");// 根据生日排序演示。al = sm.sort(sm.stu_map);for (Student s : al) {System.out.println(s);}System.out.println("++++++++++++++++++++++++++++++++++");// 检索演示。System.out.println(sm.getId(3));}}
运行结果:
学号:0姓名 :name0性别:女生日:Sat Mar 27 04:46:34 CST
学号:1姓名 :name1性别:女生日:Thu Jun 21 11:45:02 CDT 1990
学号:2姓名 :name2性别:男生日:Sun Feb 12 00:31:59 CST 1984
学号:3姓名 :name3性别:男生日:Thu Jul 25 06:13:12 CST 1985
学号:4姓名 :name4性别:女生日:Mon Oct 14 23:05:21 CST 2002
学号:5姓名 :name5性别:男生日:Sun May 02 06:48:00 CST
++++++++++++++++++++++++++++++++++
学号:2姓名 :name2性别:男生日:Sun Feb 12 00:31:59 CST 1984
学号:3姓名 :name3性别:男生日:Thu Jul 25 06:13:12 CST 1985
学号:1姓名 :name1性别:女生日:Thu Jun 21 11:45:02 CDT 1990
学号:4姓名 :name4性别:女生日:Mon Oct 14 23:05:21 CST 2002
学号:0姓名 :name0性别:女生日:Sat Mar 27 04:46:34 CST
学号:5姓名 :name5性别:男生日:Sun May 02 06:48:00 CST
++++++++++++++++++++++++++++++++++
学号:3姓名 :name3性别:男生日:Thu Jul 25 06:13:12 CST 1985
集合练习。学生信息包括学号 姓名 出生日期 性别。把N个学生的信息放入一个集合中。可以根据学号 对学生信息进行检索。并可以根据生日进行排序输出。