黑马程序员技术交流社区

标题: TreeSet集合添加对象 [打印本页]

作者: 葛晓东    时间: 2014-6-6 17:21
标题: TreeSet集合添加对象
本帖最后由 葛晓东 于 2014-6-6 17:57 编辑

  1. //要用TreeSet集合,需要导包
  2. import java.util.TreeSet;
  3. /**
  4. * 10、声明类Student,包含3个成员变量:name、age、score,
  5. * 创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)。
  6. */
  7. public class Test10 {
复制代码


(139.75 KB, 下载次数: 97)


作者: Boiled_Water    时间: 2014-6-6 17:24
哥们,你的主函数呢
作者: 葛晓东    时间: 2014-6-6 17:44
Boiled_Water 发表于 2014-6-6 17:24
哥们,你的主函数呢

:funk:   我去 这个真丢人
  改了之后为什么还有那么多小叹号啊?
作者: eternallove    时间: 2014-6-6 18:03
那么多小叹号是没加泛型
作者: GoodBoy123    时间: 2014-6-6 18:29
加上<Student>
作者: 葛晓东    时间: 2014-6-6 19:24
GoodBoy123 发表于 2014-6-6 18:29
加上
  1. //导包
  2. import java.util.Iterator;
  3. import java.util.TreeSet;

  4. /**
  5. * 10、声明类Student,包含3个成员变量:name、age、score, 创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)。
  6. */
  7. public class Test10 {
  8.         public static void main(String[] args) {
  9.                 // 创建TreeSet对象 scoreForm 成绩表
  10.                 TreeSet<Student> scoreForm = new TreeSet<>();
  11.                 // 创建5个对象装入TreeSet(考虑成绩相同的问题)

  12.                 scoreForm.add(new Student("小刚", 18, 88));
  13.                 scoreForm.add(new Student("小明", 18, 92));
  14.                 scoreForm.add(new Student("小强", 18, 95));
  15.                 scoreForm.add(new Student("小龙", 18, 92));
  16.                 scoreForm.add(new Student("小花", 18, 97));
  17.                 // Iterator接口,迭代器,对 collection 进行迭代的迭代器
  18.                 Iterator<Student> iter = scoreForm.iterator();
  19.                 // 循环输出,hasNext()如果仍有元素可以迭代,则返回 true
  20.                 while (iter.hasNext()) {
  21.                         // next() 返回迭代的下一个元素。
  22.                         Student student = (Student) iter.next();
  23.                         System.out.println("姓名:" + student.getName() + ",年龄:"
  24.                                         + student.getAge() + ",成绩:" + student.getScore());
  25.                 }
  26.         }
  27. }

  28. // 因为往TreeSet集合中存元素,TreeSet具有排序功能,但是需要元素自身具有比较性
  29. // 元素需要实现Comparable接口,覆盖CompareTo方法
  30. // 声明类Student
  31. class Student implements Comparable {
  32.         private String name;
  33.         private int age;
  34.         private int score;

  35.         // 构造函数,方便赋值
  36.         Student(String name, int age, int score) {
  37.                 this.name = name;
  38.                 this.age = age;
  39.                 this.score = score;
  40.         }

  41.         // 覆盖compareTo方法
  42.         public int compareTo(Object object) {
  43.                 // 需要判断传入的对象object是不是学生类,如果不是,直接输出"不是学生",用instanceof判断
  44.                 if (!(object instanceof Student))
  45.                         System.out.println("不是学生");
  46.                 // 将Object类强转为Student类(向下转型)
  47.                 Student student = (Student) object;
  48.                 if (this.score > student.score)
  49.                         return 1;
  50.                 if (this.score == student.score) {
  51.                         // 如果成绩相同的时候,要判断姓名(或者年龄也可以)是否相同
  52.                         return this.name.compareTo(student.name);
  53.                 }
  54.                 return -1;
  55.         }

  56.         public String getName() {
  57.                 return name;
  58.         }

  59.         public int getAge() {
  60.                 return age;
  61.         }

  62.         public int getScore() {
  63.                 return score;
  64.         }
  65. }
复制代码
加了          在声明Student实现Compareable的那行还是有个小黄点啊
作者: crazystraw    时间: 2014-6-6 20:25
接口Comparable也要加泛型的,你把它的泛型变成Object就好了
作者: 葛晓东    时间: 2014-6-6 21:18
crazystraw 发表于 2014-6-6 20:25
接口Comparable也要加泛型的,你把它的泛型变成Object就好了

嗯嗯 ,我试试
作者: 葛晓东    时间: 2014-6-6 21:22
crazystraw 发表于 2014-6-6 20:25
接口Comparable也要加泛型的,你把它的泛型变成Object就好了

,好尴尬,不知道怎么加啊、、、、、
作者: 多一点    时间: 2014-6-6 21:26
main方法上加个 @SuppressWarnings("unchecked") 就好了 就不会检查啦泛型的问题
作者: crazystraw    时间: 2014-6-6 21:30
class Student implements Comparable<Object>{···}
作者: 卞新浩    时间: 2014-6-6 22:17
JDK1.5版本后 出现泛型   不用泛型  就会有警告
作者: 清规欲    时间: 2014-6-7 11:58
思路1:让Student类实现Comparable接口,定义其中的compareTo方法  
思路2:自己建一个实现Comparator的比较器类,定义其中的compare方法,然后在new  TreeSet时调用对应的构造函数
作者: 倪大大    时间: 2014-6-7 12:07
接口那里加个泛型 implements Comparable<Object>
作者: 葛晓东    时间: 2014-6-7 20:31
哦   那个泛型  我们还木有学....老师说不重要
作者: 葛晓东    时间: 2014-6-8 22:13
清规欲 发表于 2014-6-7 11:58
思路1:让Student类实现Comparable接口,定义其中的compareTo方法  
思路2:自己建一个实现Comp ...

嗯 ,今天刚好学了比较器,我在优化下代码
作者: 光头强    时间: 2015-5-27 18:25
你学的怎么样啦呢
作者: 雨来    时间: 2015-10-6 18:13
视频里没有酱新特性 是10年的啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2