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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 18353665932 中级黑马   /  2014-6-22 16:22  /  1840 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 18353665932 于 2014-6-22 16:28 编辑
  1. </blockquote></div><div class="blockcode"><blockquote>
  2. public class Person implements Comparable {
  3.                 public Person(String name, int age) {
  4.                 // TODO Auto-generated constructor stub
  5.                         super();
  6.                         this.name = name;
  7.                         this.age = age;
  8.                         
  9.         }
  10.                 public Person(){
  11.                         super();
  12.                 }
  13.                 public String getName() {
  14.                 return name;
  15.         }
  16.         public void setName(String name) {
  17.                 this.name = name;
  18.         }
  19.         public int getAge() {
  20.                 return age;
  21.         }
  22.         public void setAge(int age) {
  23.                 this.age = age;
  24.         }
  25.                 private String name;
  26.                 private int age;
  27.                
  28.                 //按照Person的年龄进行比较
  29.                 public int compareTo(Object o) {
  30.                         // TODO Auto-generated method stub
  31.                         Person p = (Person)o;
  32.                 int temp = this.age-p.age;
  33.                         
  34.                         return temp==0?this.name.compareTo(p.name):temp;
  35.                 }
  36. }
复制代码

为什么我提交之后运行结果是地址值呢??应该按照年龄进行排序啊!!求各位大神指点迷津!主函数在一楼,请各位大神批阅!

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

16 个回复

倒序浏览
为什么传不了所有代码??剩下的代码如下,
  1. //上方为 Person类,下方为TreeSet排序主函数

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


  5. public class test1 {

  6.      /*
  7.       * TreeSet:可以给其中的元素进行指定方式排序,使用的自然顺序
  8.       * 自然顺序:就是元素自身的具备的比较性实现comparable接口的compareTo方法
  9.       * */
  10.         public static void main(String[] args) {
  11.                 TreeSet t1 = new TreeSet();
  12.                 t1.add(new Person("lisi1",23));
  13.                 t1.add(new Person("lisi3",22));
  14.                 t1.add(new Person("lisi4",25));
  15.                 t1.add(new Person("lisi6",26));
  16.                
  17.                         Iterator it = t1.iterator();
  18.                         while(it.hasNext()){
  19.                                 System.out.println(it.next());
  20.                         }
  21.       
  22.         }
  23. }
复制代码
回复 使用道具 举报
import java.util.ArrayList;
import java.util.Iterator;
import java.util.TreeSet;


public class test1 {

        public static void main(String[] args) {
                //创建对象,加泛型
                TreeSet<Person> t1 = new TreeSet<Person>();
                Person p1=new Person("lisi1",23);
                Person p2=new Person("lisi3",22);
                Person p3=new Person("lisi4",25);
                Person p4=new Person("lisi6",26);
                //添加元素
                t1.add(p4);
                t1.add(p3);
                t1.add(p2);
                t1.add(p1);
                //增强for与下面Iterator输出一个意思
                       /*for (Person person : t1) {
                                                System.out.println(person);
                                        }*/
                Iterator it = t1.iterator();
                while(it.hasNext()){
                        System.out.println(it.next());
                }

        }
}

回复 使用道具 举报
//泛型
public class Person implements Comparable<Person> {
        private String name;
        private int age;
        public Person(){}
        public Person(String name, int age) {
                super();
                this.name = name;
                this.age = age;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + age;
                result = prime * result + ((name == null) ? 0 : name.hashCode());
                return result;
        }
       
        @Override
        public String toString() {
                return "Person [name=" + name + ", age=" + age + "]";
        }
       
        @Override
        public int compareTo(Person t1) {
                //重写方法
                                 int num1 = this.getAge() - t1.getAge();
                                 if(num1 == 0){
                                 return this.getName().compareTo(t1.getName());
                                }
                                return num1;
        };
       
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
这是我的代码,Person类里面要重写toSting这个方法,
public int compareTo(Object o)这个方法要改成
public int compareTo(Person t1)
回复 使用道具 举报
天,殇心 发表于 2014-6-22 18:13
这是我的代码,Person类里面要重写toSting这个方法,
public int compareTo(Object o)这个方法要改成
pub ...

为什么毕老师的代码中没有这些??这样做可以,我的那些代码是毕老师视频中的代码,没有ToString代码块,是不是缺少了什么??
回复 使用道具 举报
import java.util.ArrayList;
import java.util.Iterator;
import java.util.TreeSet;


public class test1 {

        public static void main(String[] args) {
                //创建对象,加泛型
                TreeSet t1 = new TreeSet();
                Person p1=new Person("lisi1",23);
                Person p2=new Person("lisi3",22);
                Person p3=new Person("lisi4",25);
                Person p4=new Person("lisi6",26);
                //添加元素
                t1.add(p4);
                t1.add(p3);
                t1.add(p2);
                t1.add(p1);
                //增强for与下面Iterator输出一个意思
                       /*for (Person person : t1) {
                                                System.out.println(person);
                                        }*/
                Iterator it = t1.iterator();
                while(it.hasNext()){
                        Person p11 = (Person)it.next();
                        System.out.println(p11.getName()+"*******"+p11.getAge());
                }

        }
}


回复 使用道具 举报
public class Person implements Comparable {
        private String name;
        private int age;
        public Person(String name, int age) {
                // TODO Auto-generated constructor stub
                super();
                this.name = name;
                this.age = age;

        }

        public Person() {
                super();
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                this.age = age;
        }

       

        // 按照Person的年龄进行比较
        public int compareTo(Object o) {
                // TODO Auto-generated method stub
                Person p = (Person) o;
                int temp = this.getAge() - p.getAge();
               
               
                return temp == 0 ? this.name.compareTo(p.name) : temp;

        }
}

回复 使用道具 举报
   public int compareTo(Object o)这个方法里是Object 类型的
while(it.hasNext()){
                        Person p11 = (Person)it.next();
                        System.out.println(p11.getName()+"*******"+p11.getAge());
                }
在这里需要强制转换,如果你用泛型的话,就不会这样了
回复 使用道具 举报
天,殇心 发表于 2014-6-22 23:03
public int compareTo(Object o)这个方法里是Object 类型的
while(it.hasNext()){
                    ...

这不是跟我代码一样吗??还是输出的是地址值啊。。。
回复 使用道具 举报
这是你的代码:
Iterator it = t1.iterator();
                        while(it.hasNext()){
                                System.out.println(it.next());
                        }
这是我的代码 :
  Iterator it = t1.iterator();
                while(it.hasNext()){
                        Person p11 = (Person)it.next();
                        System.out.println(p11.getName()+"*******"+p11.getAge());
                }集合中存储的元素都是引用类型的,所以你直接输出当然是一个引用地址了,还有就是集合中可以存储不同类型的元素;所以集合中接收的默认是Object类型的,所以在遍历的时候要做向下转型;

回复 使用道具 举报
天,殇心 发表于 2014-6-23 21:35
这是你的代码:
Iterator it = t1.iterator();
                        while(it.hasNext()){

哦哦,我明白了。嘿嘿!谢谢啦!
回复 使用道具 举报
主要是我太笨,没把问题一开始就给你弄明白!!!!:lol
回复 使用道具 举报
天,殇心 发表于 2014-6-24 11:21
主要是我太笨,没把问题一开始就给你弄明白!!!!

那我岂不是更笨{:2_34:}
回复 使用道具 举报
互相学习吧,:lol为了目标加油
回复 使用道具 举报
天,殇心 发表于 2014-6-24 15:29
互相学习吧,为了目标加油

恩恩呢,加油!
回复 使用道具 举报
Person 类重写toString()方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马