本帖最后由 庄星睿 于 2012-6-16 08:55 编辑
找了好长时间一直没找到问题,发帖子问,大家都能运行,说我文件没编译或是运行错了,没办法,自己找原因吧,看了N变代码,一个一个排除,最后装回了jdk 1.6
版本的,运行成功没错误,跟视频上讲 的一样,但安装了最新的jdk 1.7版本,后运行出了如下的问题,麻烦帮忙看一下,我看了1.7版的新特性里面没找到。另外建议论坛里自学视频的,最好把jdk和API更新到最新版本,会发现很多问题。- import java.util.*;
- class TreeSetDemo
- {
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- public static void main(String[] args)
- {
- TreeSet ts=new TreeSet();
- ts.add(new Student("张三",30)); //还是这一行有问题
- //ts.add(new Student("李四",20));
- //ts.add(new Student("王五",10));
- //ts.add(new Student("丽丽",25));
- sop(ts);
- Iterator it=ts.iterator();
- while (it.hasNext())
- {
- Student s=(Student)it.next();
- sop(s.getName()+"......."+s.getAge());
- }
- }
- }
- class Student
- {
- private String name;
- private int age;
- public Student(String name,int age)
- {
- this.name=name;
- this.age=age;
- }
- public String getName()
- {
- return this.name;
- }
- public int getAge()
- {
- return this.age;
- }
- }
复制代码 这里我只存一个对象应该是可以存进去的啊,还没调用比较呢,可是运行结果还是
还有后面我调用了compareTo的方法也有问题:- import java.util.*;
- class TreeSetDemo
- {
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- public static void main(String[] args)
- {
- TreeSet ts=new TreeSet();
- ts.add(new Student("张三",30));
- ts.add(new Student("李四",20));
- ts.add(new Student("王五",10));
- ts.add(new Student("丽丽",25));
- sop(ts);
- Iterator it=ts.iterator();
- while (it.hasNext())
- {
- Student s=(Student)it.next();
- sop(s.getName()+"......."+s.getAge());
- }
- }
- }
- class Student implements Comparable
- {
- private String name;
- private int age;
- public Student(String name,int age)
- {
- this.name=name;
- this.age=age;
- }
- public String getName()
- {
- return this.name;
- }
- public int getAge()
- {
- return this.age;
- }
- public int compareTo(Object obj)
- {
- if (!(obj instanceof Student))
- throw new RuntimeException("不是学生类");
- Student s=(Student)obj;
- System.out.println(this.name+"......compareto ......."+s.name);
- if (this.age>s.age)
- return 1;
- if (this.age==s.age)
- return 0;
- //return this.name.compareTo(s.name); //这里先不执行
- return -1;
- }
- }
复制代码 运行结果:
张三这个对象还是相当于被传入了两次,第一个问题异常,应该也是第一个对象存了两次造成的吧,我找到原因了,谁能解释一下为什么jdk7.0以后TreeSet集合里存
对象的时候第一次存就会调用compareTo()方法。。。。。求解原理??? |