黑马程序员技术交流社区

标题: 同一段代码CMD运行与MyEclipse运行结果不同。 [打印本页]

作者: 张子凯    时间: 2013-4-3 11:08
标题: 同一段代码CMD运行与MyEclipse运行结果不同。
本帖最后由 张子凯 于 2013-4-3 14:33 编辑

问题在代码中描述:
  1. import java.util.*;
  2. /*
  3. Set:无序,不可以重复元素。
  4.         |--HashSet:数据结构是哈希表。线程是非同步的。
  5.                                 保证元素唯一的原理:判断元素的hashCode值是否相同。
  6.                                 如果相同,还会继续判断元素的equals方法是否为true。
  7.         |--TreeSet:可以对Set集合中的元素进行排序。

  8. 需求:
  9. 往TreeSet集合中存储自定义对象学生。
  10. 按照学生的年龄进行排序。

  11. 记住,排序时,当主要条件相同时,一定要判断一下次要条件。
  12. */

  13. class TreeSetDemo
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 TreeSet ts = new TreeSet();        
  18.                                                                     //问题如下:当用TreeSet时,只放一个对象时,
  19.         //        ts.add("as");                                //CMD中运行不跟自己比较。
  20.                 ts.add(new Student("lisi02",22));        //CMD中运行却要强制跟自己比较,
  21.                                                                   //但是毕老师的视频中,一个对象放入TreeSet时是不跟自己比较的。
  22.                                                                   //同样代码放到MyEclipse中却不比较自己
  23.                                                                  //我自己考虑的原因是JDK版本问题,想求证一下。
  24.                                                                  //我的JDK版本是jdk1.7.0_07,是新还是旧的原因?
  25.         //        ts.add(new Student("lisi007",20));
  26.         //        ts.add(new Student("lisi09",20));
  27.         //        ts.add(new Student("lisi01",40));

  28.                 Iterator it = ts.iterator();
  29.                 while(it.hasNext())
  30.                 {
  31.                         Student stu = (Student)it.next();
  32.                         System.out.println(stu.getName()+"...."+stu.getAge());
  33.         //                System.out.println(it.next());
  34.                 }
  35.         }
  36. }

  37. class Student implements Comparable//该接口强制让学生具备比较性。
  38. {
  39.         private String name;
  40.         private int age;

  41.         Student(String name,int age)
  42.         {
  43.                 this.name = name;
  44.                 this.age = age;
  45.         }
  46.         
  47.         public int compareTo(Object obj)
  48.         {
  49.                 if(!(obj instanceof Student))
  50.                         throw new RuntimeException("不是学生对象");
  51.                 Student s = (Student)obj;
  52.                
  53.                 System.out.println(this.name+"......compareto....."+s.name);
  54.                 if(this.age>s.age)
  55.                         return 1;
  56.                 if(this.age == s.age)
  57.                         return this.name.compareTo(s.name);
  58.                 return -1;
  59.         }
  60.         public String getName()
  61.         {
  62.                 return name;
  63.         }
  64.         public int getAge()
  65.         {
  66.                 return age;
  67.         }
  68. }
复制代码

同样代码执行结果不一样.JPG (19.92 KB, 下载次数: 15)

同样代码执行结果不一样

同样代码执行结果不一样

作者: С呲號→佔缐    时间: 2013-4-3 11:18
难道eclipse没有执行compareTo()?同问
作者: 李尧    时间: 2013-4-3 12:00
卤煮,我jdk版本跟你一样,以下是结果.{:soso_e127:}

作者: 张子凯    时间: 2013-4-3 12:41
李尧 发表于 2013-4-3 12:00
卤煮,我jdk版本跟你一样,以下是结果.

技术分都51了,强人啊。。。可是我问的问题你没回答啊。。。。是跟JDK版本有关系吗?
作者: 李尧    时间: 2013-4-3 12:52
张子凯 发表于 2013-4-3 12:41
技术分都51了,强人啊。。。可是我问的问题你没回答啊。。。。是跟JDK版本有关系吗? ...

我技术分都是打酱油打出来的...不是我不想回答吖..我手上只有1.7的jdk.没法测试...你看一下你eclipse的jdk版本撒...
作者: 曾志军    时间: 2013-4-3 12:54
我是来看评论的,没看懂,求高人解答
作者: 小黑黑    时间: 2013-4-3 13:18
我运行的结果就是一样的啊:


楼主再多试试,你复制到eclipse里,然后用ctrl+shift+F,自动排版,然后运行,试一试

作者: 林声荣    时间: 2013-4-3 13:20
这个程序有安全隐患,在1.4版本的jdk是没问题了,大在1.5版本有了泛型机制导致了安全隐患的产生。这个跟编译失败是没的关系的。在毕向东老师讲的{14-02-集合框架(共性方法)视频中提到过}你可以看一下、、、
作者: 张子凯    时间: 2013-4-3 13:47
小黑黑 发表于 2013-4-3 13:18
我运行的结果就是一样的啊:

你没看懂我的问题啊。
你的运行结果也是当add进第一个对象时,强制与自己比较。
但是视频中的并没有强制跟自己比较。所以我的运行结果有2个,我的MYECLIPSE是7.5的。。。。可能老点
作者: 张子凯    时间: 2013-4-3 13:48
林声荣 发表于 2013-4-3 13:20
这个程序有安全隐患,在1.4版本的jdk是没问题了,大在1.5版本有了泛型机制导致了安全隐患的产生。这个跟编 ...

我这是第15天的内容了,你们都没看懂我的问题吗。。。。。
作者: 张子凯    时间: 2013-4-3 14:25
经过切换MYECLIPSE的JRE版本后,运行同CMD里的结果一样。。。。也就是说是JRE的问题。。。。貌似是1.7与1.6的差别吧。。C:\Documents and Settings\Administrator\桌面\问题所在.jpg

问题所在.jpg (78.16 KB, 下载次数: 18)

切换JRE

切换JRE

作者: 林声荣    时间: 2013-4-3 18:25
张子凯 发表于 2013-4-3 13:48
我这是第15天的内容了,你们都没看懂我的问题吗。。。。。

嘿嘿,现在看懂,被截图给误导了、、、




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