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

© 我为你着迷 金牌黑马   /  2014-5-3 17:10  /  1052 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;

  2. class TreeSetTest
  3. {
  4.                 public static void main(String[] args)
  5.                 {
  6.                                 TreeSet ts=new TreeSet();
  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.                                
  14.                         Iterator it=ts.iterator();
  15.                         while(it.hasNext())
  16.                         {
  17.                                         System.out.println(it.next());       
  18.                         }
  19.                 }       
  20. }


  21. class StrLenComparator implements Comparator
  22. {
  23.                 public int compare(Object o1,Object o2)
  24.                 {
  25.                                 String s1=(String)o1;
  26.                                 String s2=(String)o2;
  27.                                
  28.                                 int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
  29.                                   if(num==0)
  30.                                     return s1.compareTo(s2);
  31.                                  
  32.                                  return num;
  33.                 }       
  34. }
复制代码
大家好,我想问下String为什么要做强转呢?还有
int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
if(num==0)
return s1.compareTo(s2);

这句话是什么意思呢? 麻烦帮忙解答下,3Q。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

3 个回复

倒序浏览
此时你传入的o1,o2是Object类型,而你是用String类型接收,会发生类型转换异常,就像你将一个动物类赋给猫类,所以需要强转。
而String类中compareTo()方法的意思是比较字符串按字典顺序比较。
int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));这是比较字符串长度
if(num==0)
return s1.compareTo(s2);
当他们长度相同时,就比较他们的字典长度,如果是按英文字母开头的,就是按A-->Z排。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
  1. public int compare(Object o1,Object o2)  //这里的参数类型是Object。
  2.                 {
  3.                                 String s1=(String)o1; //所以这里要强转。
  4.                                 String s2=(String)o2;
  5.                                 
  6.                                 int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));                                                                                                // 基本类型的包装类才实现了Comparable接口。
  7.                                   if(num==0)                                                                                       
  8.                                     return s1.compareTo(s2);
  9.                                  
  10.                                  return num;
  11.                 }        
复制代码


回复 使用道具 举报
唯伟123 发表于 2014-5-3 17:33
此时你传入的o1,o2是Object类型,而你是用String类型接收,会发生类型转换异常,就像你将一个动物类赋给猫 ...

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