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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© czb 中级黑马   /  2014-9-19 14:44  /  1138 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;
  2. class TreeSetString {
  3.         public static void main(String[] args) {
  4.                 // TODO Auto-generated method stub
  5.                 TreeSet ts=new TreeSet(new Mycompare());
  6.                
  7.                 ts.add("eweas");
  8.                 ts.add("rrqweqw");
  9.                 ts.add("fsdfs");
  10.                 ts.add("fds");
  11.                
  12.                 Iterator it=ts.iterator();
  13.                
  14.                 while(it.hasNext()){       
  15.                         System.out.println(it.next());
  16.                 }               
  17.         }
  18. }

  19. class Mycompare implements Comparator{
  20.         public int compare(Object o1, Object o2) {
  21.                 String str1=(String)o1;
  22.                 String str2=(String)o1;       
  23.         int num=new Integer(str1.length()).compareTo(new Integer(str2.length()));
  24.         if(num==0)
  25.                 return str1.compareTo(str2);
  26.                 return num;
  27.         }       
  28. }
复制代码



为什么只能输出一个字符串"eweas",而不是输出它们按字符串长度排序后的全部呢~

把TreeSet ts=new TreeSet(new Mycompare());这里的传入的参数去掉后可以正常输出无序的全部字符串,是哪里出现问题了~代码跟视频全部一致,是不是JDK版本的问题~

点评

说代码跟视频完全一致的,最后都被大家发现是自己的typo。你的23行,o1应该改成o2  发表于 2014-9-19 14:58

5 个回复

倒序浏览
我用的开发工具是Myeclipse 2013,JDK版本是jdk1.8.0_05
回复 使用道具 举报
String str1=(String)o1;
String str2=(String)o1;
第二个o1应该改为o2,不然是自己与自己比较,比较器返回的都是0,相同的数据是添加不上的。

评分

参与人数 1黑马币 +5 收起 理由
fantacyleo + 5 回答正确,加5分

查看全部评分

回复 使用道具 举报 1 0
我擦,太粗心了~难怪用debug模式调试,只在while那循环了一次就跳出了= =,多谢多谢~
回复 使用道具 举报
雨下阳光 发表于 2014-9-19 14:59
String str1=(String)o1;
String str2=(String)o1;
第二个o1应该改为o2,不然是自己与自己比较,比较器返 ...

多谢~~多谢,果然是当局者迷啊~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马