黑马程序员技术交流社区

标题: 关于毕老师TreeSet练习的请教 [打印本页]

作者: liuxiang    时间: 2014-9-28 10:12
标题: 关于毕老师TreeSet练习的请教
练习:按照字符串长度排序。
  1. import java.util.*;
  2. class  TreeSetTest
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 TreeSet ts = new TreeSet(new StrLenComparator());

  7.                 ts.add("abcd");
  8.                 ts.add("cc");
  9.                 ts.add("cba");
  10.                 ts.add("aaa");
  11.                 ts.add("z");
  12.                 ts.add("hahaha");

  13.                 Iterator it = ts.iterator();

  14.                 while(it.hasNext())
  15.                 {
  16.                         System.out.println(it.next());
  17.                 }
  18.         }
  19. }

  20. class StrLenComparator implements Comparator
  21. {
  22.         public int compare(Object o1,Object o2)
  23.         {
  24.                 String s1 = (String)o1;
  25.                 String s2 = (String)o2;

  26.                        

  27.                 //int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
  28.                 int num = s1.length().compareTo(s2.length());
  29.                 if(num==0)
  30.                         return s1.compareTo(s2);

  31.                 return num;
  32.         }
  33. }
复制代码

注释的是毕老师原来的代码,新建Integer对象比较,下面一行是我直接用字符串长度比较,这两条语句运行的结果是一样的,我想问毕老师用Inter比较的用意是什么,还有直接用字符串比较是不是有什么弊端
作者: 小漠    时间: 2014-9-28 11:20
本帖最后由 小漠 于 2014-9-28 11:24 编辑

compareTo()比较的是对象,你那个没报错吗?int没有compareTo()方法
作者: liuxiang    时间: 2014-9-28 13:12
小漠 发表于 2014-9-28 11:20
compareTo()比较的是对象,你那个没报错吗?int没有compareTo()方法

没有报错,结果是一样的,我明白了应该是自动装箱成integer了,但是我不确定的是这样有没有别的弊端
作者: wez924612    时间: 2014-9-28 13:21
加油吧亲,你这东西我一点都看不懂,哈哈!
作者: 小漠    时间: 2014-9-28 13:52
liuxiang 发表于 2014-9-28 13:12
没有报错,结果是一样的,我明白了应该是自动装箱成integer了,但是我不确定的是这样有没有别的弊端 ...


开始我理解的也是会自动装箱,但是感觉毕老师肯定不会写冗余的代码,就把你的代码复制了一下,如上图

作者: 沙拉很好吃    时间: 2014-9-28 14:19
学习学习!
作者: 笑脸迷人    时间: 2014-9-28 15:32
楼主,你用的是什么编译器,那个版本的~~,我用的1.7报错了!
作者: 郑飞    时间: 2014-9-28 17:39
我都是偷懒用s1.length()-s2.length()  也不知道有什么问题没
作者: liuxiang    时间: 2014-9-28 22:07
笑脸迷人 发表于 2014-9-28 15:32
楼主,你用的是什么编译器,那个版本的~~,我用的1.7报错了!

我的是1.8的,应该是又更新了吧
作者: liuxiang    时间: 2014-9-28 22:11
小漠 发表于 2014-9-28 13:52
开始我理解的也是会自动装箱,但是感觉毕老师肯定不会写冗余的代码,就把你的代码复制了一下,如上图
...

我的jdk1.8版本的,没有报错出运行结果的,应该是版本问题吧,但是一开始敲代码还是要按照老师的来吧
作者: liuxiang    时间: 2014-9-28 22:22
郑飞 发表于 2014-9-28 17:39
我都是偷懒用s1.length()-s2.length()  也不知道有什么问题没

你的编译也是没有问题的吧,你的jdk是哪个版本的,我的是1.8的
作者: noiary    时间: 2014-9-28 22:27
带着疑问去学习,效率更高.

隐约记得我之前试过,报错了,后来就没再尝试.






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