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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package Collection;

  2. import java.util.*;

  3. public class TreeSetTest {

  4. /*练习:按照字符串长度排序。
  5. *
  6. * 字符串本身具备比较性,但是他的比较方式不是所需要的,这时就只能用比较器。
  7. */
  8. public static void main(String[] args) {

  9. TreeSet ts = new TreeSet(new StrLenComparator());

  10. ts.add("abcd");
  11. ts.add("cc");
  12. ts.add("cba");
  13. ts.add("z");
  14. ts.add("aaa");
  15. ts.add("hahaha");

  16. Iterator it = ts.iterator();
  17. while(it.hasNext())
  18. System.out.println(it.next());
  19. }
  20. }

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

  25. /*if(s1.length()>s2.length())
  26. return 1; 这里的return 得到的 0 或者 1 下一步怎么执行 返回值被调用到哪里??
  27. if(s1.length()==s2.length())
  28. return 0;
  29. return -1;*/

  30. int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));

  31. if(num == 0)
  32. return s1.compareTo(s2);// 这个return的返回值怎么执行?返回到哪里?
  33. return num;
  34. }
  35. }
复制代码
请大家帮忙啊   谢谢啦!

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

4 个回复

倒序浏览
if(s1.length()==s2.length())

return 0;

return -1;*/


if(num == 0)   这句话是说当(两个元素)前一个因素相同时,会去比较第二个因素。
     return s1.compareTo(s2);如果这句话执行到了,也就是说前一个因素相同,就会返回第二个因素的
                                         比  较值,这句话执行完就回直接跳出compareTo方法,而不会去执行下面
                                        的return。如果这个return返回的是0,说明两个元素相同,后来的元素就不
                                        会存进TreeSet集合中,因为TreeSet中元素是不重复的!
return num;

希望可以帮到你
回复 使用道具 举报
xkfxm 发表于 2013-8-15 18:38
if(s1.length()==s2.length())

return 0;

好的,谢谢啦  有点明白了,不过  这个return 的返回值返回到哪里去了呢   就是说 返回后这值怎么执行去了呢?   还是有点不明白  麻烦能不能再给解答一下  {:soso_e113:}
回复 使用道具 举报
排序分为两部分:排序规则和排序算法

规则用来判断对象,算法用来考虑如何排序。

那么方法返回值就是属于制定排序的规则部分,我们可以通过定制返回值1和-1位置的调换来实现升序和降序排列的转换。

和你一同学习!{:soso_e141:}
回复 使用道具 举报
邪恶飞猫 发表于 2013-8-16 00:50
这个需要你去查看源代码,在java文档中可以找到TreeSet下Comparator的描述,写着“可以将 Comparator 传递 ...

好的 非常感谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马