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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mohuancaizi 中级黑马   /  2014-4-11 17:56  /  1201 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 mohuancaizi 于 2014-4-11 19:01 编辑
  1. import java.util.Iterator;
  2. import java.util.TreeSet;

  3. import day15.Student;

  4. class student implements Comparable{
  5.         private int age ;
  6.         private String name;
  7.         public int getAge() {
  8.                 return age;
  9.         }
  10.         public String getName() {
  11.                 return name;
  12.         }
  13.         student(int age, String name) {
  14.                 super();
  15.                 this.age = age;
  16.                 this.name = name;
  17.         }
  18.         @Override
  19.         public int hashCode() {
  20.                 final int prime = 31;
  21.                 int result = 1;
  22.                 result = prime * result + age;
  23.                 result = prime * result + ((name == null) ? 0 : name.hashCode());
  24.                 return result;
  25.         }
  26.         @Override
  27.         
  28.         public int compareTo(Object o) {
  29.                 // TODO Auto-generated method stub
  30.                 return 0;
  31.         }
  32.         /*
  33.          * public int compareTo(Object obj){
  34.                 if(!(obj instanceof Student))
  35.                         throw new RuntimeException("不是学生对象");
  36.                 Student s = (Student)obj;//强转
  37.                 if(this.age>s.age)
  38.                         return 1;
  39.                
  40.                
  41.                
  42.                 if(this.age==s.age)
  43.                         //return 0;分数相同   系统认为是一个人  所以下面要改  分数相同  比较姓名
  44.                         return this.name.compareTo(s.name);
  45.                 return -1;
  46.                
  47.         }
  48.          */
  49.         /*public int compareTo(student s) {
  50.         
  51.                 int num =new Integer(this.age).compareTo(new Integer(s.age));
  52.                 if(num==0){
  53.                         return this.name.compareTo(s.name);
  54.                 }
  55.                 return num;
  56.                
  57.         }*/
  58.         
  59.         public int compareTo(student o) {
  60.                 int num = new Integer(this.age).compareTo(new Integer(o.age));
  61.                 if(num==0){
  62.                         return this.name.compareTo(o.name);
  63.                 }
  64.                 return num;
  65.         }
  66.         
  67.         @Override
  68.         public boolean equals(Object obj) {
  69.                 if (this == obj)
  70.                         return true;
  71.                 if (obj == null)
  72.                         return false;
  73.                 if (getClass() != obj.getClass())
  74.                         return false;
  75.                 student other = (student) obj;
  76.                 if (age != other.age)
  77.                         return false;
  78.                 if (name == null) {
  79.                         if (other.name != null)
  80.                                 return false;
  81.                 } else if (!name.equals(other.name))
  82.                         return false;
  83.                 return true;
  84.         }
  85.         @Override
  86.         public String toString() {
  87.                 return "student [age=" + age + ", name=" + name + "]";
  88.         }
  89.         

  90.         
  91.         
  92. }
  93. public class TreeSetDemo1 {

  94.         /**
  95.          * @param args
  96.          */
  97.         public static void main(String[] args) {
  98.                 TreeSet ts = new TreeSet();
  99.                 ts.add(new student(12,"aaaaaa"));
  100.                 //ts.add(new Student("lisi01",22));
  101.                 ts.add(new student(112,"aaaaaa"));
  102.                 ts.add(new student(122,"aaaaaa"));
  103.                 ts.add(new student(132,"aaaaaa"));
  104.                 ts.add(new student(12,"bbbbbb"));
  105.                
  106.                 System.out.println(ts);
  107.                 Iterator it = ts.iterator();
  108.                 while(it.hasNext()){
  109.                         student stu =(student) it.next();
  110.                         System.out.println(stu.getAge()+"::::::"+stu.getName());
  111.                 }
  112.         }

  113. }
复制代码

5 个回复

正序浏览
我看了你代码半天,终于找到问题所在了,你空实现了一个compareto方法,这个方法如果空实现,那你加入的任何对象都是正确的,我根据你的意思代码改好了,输出结果应该是先比较名字,名字相同,应该比较年龄。比较年龄有个简单的方法就是直接用this.age-o.age,这样代码很简单,而且效率快
  1. package com.itheima;

  2. import java.util.Iterator;
  3. import java.util.TreeSet;

  4. class student implements Comparable{
  5.         private int age ;
  6.         private String name;
  7.         public int getAge() {
  8.                 return age;
  9.         }
  10.         public String getName() {
  11.                 return name;
  12.         }
  13.         student(int age, String name) {
  14.                 super();
  15.                 this.age = age;
  16.                 this.name = name;
  17.         }
  18.         @Override
  19.         public int hashCode() {
  20.                 final int prime = 31;
  21.                 int result = 1;
  22.                 result = prime * result + age;
  23.                 result = prime * result + ((name == null) ? 0 : name.hashCode());
  24.                 return result;
  25.         }
  26.         @Override
  27.         public int compareTo(Object o) {
  28.                 // TODO Auto-generated method stub
  29.                
  30.                if(!(o instanceof student)){
  31.                       throw new RuntimeException();
  32.                }
  33.                int num = this.name.compareTo(((student) o).name);
  34.                
  35.                if(num==0){
  36.                        num = this.age-((student) o).age;
  37.                }
  38.                         return num;
  39.         }

  40.         
  41.         @Override
  42.         public boolean equals(Object obj) {
  43.                 if (this == obj)
  44.                         return true;
  45.                 if (obj == null)
  46.                         return false;
  47.                 if (getClass() != obj.getClass())
  48.                         return false;
  49.                 student other = (student) obj;
  50.                 if (age != other.age)
  51.                         return false;
  52.                 if (name == null) {
  53.                         if (other.name != null)
  54.                                 return false;
  55.                 } else if (!name.equals(other.name))
  56.                         return false;
  57.                 return true;
  58.         }
  59.         @Override
  60.         public String toString() {
  61.                 return "student [age=" + age + ", name=" + name + "]";
  62.         }
  63.         

  64.         
  65.         
  66. }
  67. public class Test4 {

  68.         /**
  69.          * @param args
  70.          */
  71.         public static void main(String[] args) {
  72.                 TreeSet ts = new TreeSet();
  73.                 ts.add(new student(12,"aaaaaa"));
  74.                 //ts.add(new Student("lisi01",22));
  75.                 ts.add(new student(112,"aaaaaa"));
  76.                 ts.add(new student(122,"aaaaaa"));
  77.                 ts.add(new student(132,"aaaaaa"));
  78.                 ts.add(new student(12,"bbbbbb"));
  79.                
  80.                 System.out.println(ts);
  81.                 Iterator it = ts.iterator();
  82.                 while(it.hasNext()){
  83.                         student stu =(student) it.next();
  84.                         System.out.println(stu.getAge()+"::::::"+stu.getName());
  85.                 }
  86.         }

  87. }
复制代码
回复 使用道具 举报
Kelvinhu 发表于 2014-4-11 18:16
OK,帮你改了下,可以了。

student n = (student)o;   
为什么要强转一下呢????  
回复 使用道具 举报
OK,帮你改了下,可以了。

  1. import java.util.Iterator;
  2. import java.util.TreeSet;

  3. //import day15.Student;

  4. class student implements Comparable{
  5.         private int age ;
  6.         private String name;
  7.         public int getAge() {
  8.                 return age;
  9.         }
  10.         public String getName() {
  11.                 return name;
  12.         }
  13.         student(int age, String name) {
  14.                 super();
  15.                 this.age = age;
  16.                 this.name = name;
  17.         }
  18.         @Override
  19.         public int hashCode() {
  20.                 final int prime = 31;
  21.                 int result = 1;
  22.                 result = prime * result + age;
  23.                 result = prime * result + ((name == null) ? 0 : name.hashCode());
  24.                 return result;
  25.         }
  26.         


  27.         public int compareTo(Object o) {
  28.                         student n = (student)o;
  29.                 int num = new Integer(this.age).compareTo(new Integer(n.age));
  30.                 if(num==0){
  31.                         return this.name.compareTo(n.name);
  32.                 }
  33.                 return num;
  34.         }
  35.         
  36.         @Override
  37.         public boolean equals(Object obj) {
  38.                 if (this == obj)
  39.                         return true;
  40.                 if (obj == null)
  41.                         return false;
  42.                 if (getClass() != obj.getClass())
  43.                         return false;
  44.                 student other = (student) obj;
  45.                 if (age != other.age)
  46.                         return false;
  47.                 if (name == null) {
  48.                         if (other.name != null)
  49.                                 return false;
  50.                 } else if (!name.equals(other.name))
  51.                         return false;
  52.                 return true;
  53.         }
  54.         
  55.         
  56.         public String toString() {
  57.                 return "student [age=" + age + ", name=" + name + "]";
  58.         }
  59.         

  60.         
  61.         
  62. }
  63. public class TreeSetDemo1 {

  64.         /**
  65.          * @param args
  66.          */
  67.         public static void main(String[] args) {
  68.                 TreeSet ts = new TreeSet();
  69.                 ts.add(new student(12,"aaaaaa"));
  70.                 //ts.add(new Student("lisi01",22));
  71.                 ts.add(new student(112,"aaaaaa"));
  72.                 ts.add(new student(122,"aaaaaa"));
  73.                 ts.add(new student(132,"aaaaaa"));
  74.                 ts.add(new student(12,"bbbbbb"));
  75.                
  76.                 System.out.println(ts);
  77.                 Iterator it = ts.iterator();
  78.                 while(it.hasNext()){
  79.                         student stu =(student) it.next();
  80.                         System.out.println(stu.getAge()+"::::::"+stu.getName());
  81.                 }
  82.         }

  83. }
复制代码


运行结果是:[student [age=12, name=aaaaaa], student [age=12, name=bbbbbb], student [age=112, name=aaaaaa], student [age=122, name=aaaaaa], student [age=132, name=aaaaaa]]
12::::::aaaaaa
12::::::bbbbbb
112::::::aaaaaa
122::::::aaaaaa
132::::::aaaaaa



回复 使用道具 举报
Tking 发表于 2014-4-11 18:05
没错呀 ,要不你把第四行的 代码删除 import day15.Student; 试试没问题呀可以运行 ...

那个错误 已经改了   现在  主要是   输出的结果  只有 一个   12::::::aaaaaa    为什么其他的  都没有了
回复 使用道具 举报
没错呀 ,要不你把第四行的 代码删除 import day15.Student; 试试没问题呀可以运行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马