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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liuxiang 中级黑马   /  2014-9-28 10:12  /  1712 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

练习:按照字符串长度排序。
  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比较的用意是什么,还有直接用字符串比较是不是有什么弊端

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 赞一个!

查看全部评分

11 个回复

倒序浏览
本帖最后由 小漠 于 2014-9-28 11:24 编辑

compareTo()比较的是对象,你那个没报错吗?int没有compareTo()方法
回复 使用道具 举报
小漠 发表于 2014-9-28 11:20
compareTo()比较的是对象,你那个没报错吗?int没有compareTo()方法

没有报错,结果是一样的,我明白了应该是自动装箱成integer了,但是我不确定的是这样有没有别的弊端

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

回复 使用道具 举报
加油吧亲,你这东西我一点都看不懂,哈哈!
回复 使用道具 举报
liuxiang 发表于 2014-9-28 13:12
没有报错,结果是一样的,我明白了应该是自动装箱成integer了,但是我不确定的是这样有没有别的弊端 ...


开始我理解的也是会自动装箱,但是感觉毕老师肯定不会写冗余的代码,就把你的代码复制了一下,如上图
回复 使用道具 举报
学习学习!
回复 使用道具 举报
楼主,你用的是什么编译器,那个版本的~~,我用的1.7报错了!
回复 使用道具 举报
郑飞 高级黑马 2014-9-28 17:39:00
8#
我都是偷懒用s1.length()-s2.length()  也不知道有什么问题没
回复 使用道具 举报
笑脸迷人 发表于 2014-9-28 15:32
楼主,你用的是什么编译器,那个版本的~~,我用的1.7报错了!

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

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

你的编译也是没有问题的吧,你的jdk是哪个版本的,我的是1.8的
回复 使用道具 举报
带着疑问去学习,效率更高.

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

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马