黑马程序员技术交流社区

标题: 求解,一个小程序~ [打印本页]

作者: czb    时间: 2014-9-19 14:44
标题: 求解,一个小程序~
  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版本的问题~
作者: czb    时间: 2014-9-19 14:46
我用的开发工具是Myeclipse 2013,JDK版本是jdk1.8.0_05
作者: 雨下阳光    时间: 2014-9-19 14:59
String str1=(String)o1;
String str2=(String)o1;
第二个o1应该改为o2,不然是自己与自己比较,比较器返回的都是0,相同的数据是添加不上的。
作者: czb    时间: 2014-9-19 15:02
我擦,太粗心了~难怪用debug模式调试,只在while那循环了一次就跳出了= =,多谢多谢~
作者: czb    时间: 2014-9-19 15:04
雨下阳光 发表于 2014-9-19 14:59
String str1=(String)o1;
String str2=(String)o1;
第二个o1应该改为o2,不然是自己与自己比较,比较器返 ...

多谢~~多谢,果然是当局者迷啊~~




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