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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Zhang_qian 中级黑马   /  2012-5-15 13:42  /  2142 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我想要的结果是
a
aa
aaa
bbb
ccc但是结果只有三个,不知道怎么回事?请高手指点一下
代码如下:
import java.util.*;
class TreeSetDemo
{
        public static void main(String[] args)
        {
                TreeSet ts=new TreeSet(new MyTer());
                ts.add("a");
                ts.add("aa");
                ts.add("bbb");
                ts.add("aaa");
                ts.add("ccc");
                Iterator it=ts.iterator();
                while(it.hasNext())
                {
                        System.out.println(it.next());
                }
        }
}
class MyTer implements Comparator
{
        public int compare(Object o1,Object o2)
        {
                String s1=(String)o1;
               
                String s2=(String)o2;
                int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
               
                return num;
}        }

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 主要条件和次要条件分清楚,你这只有判断长.

查看全部评分

7 个回复

倒序浏览
注意:TreeSetDemo.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
怎么是这样的
回复 使用道具 举报
本帖最后由 李哲 于 2012-5-15 14:00 编辑


import java.util.*;
class TreeSetDemo
{
        public static void main(String[] args)
        {
                TreeSet ts=new TreeSet(new MyTer());
                ts.add("a");
                ts.add("aa");
                ts.add("bbb");
                ts.add("aaa");
                ts.add("ccc");
                Iterator it=ts.iterator();
                while(it.hasNext())
                {
                        System.out.println(it.next());
                }
        }
}
class MyTer implements Comparator
{
        public int compare(Object o1,Object o2)
        {
                String s1=(String)o1;
               
                String s2=(String)o2;
               
            
                if(new Integer(s1.length()).compareTo(new Integer(s2.length()))!=0)
                        return new Integer(s1.length()).compareTo(new Integer(s2.length()));
                else
                        return         s1.compareTo(s2);
               
         }      
                 
}      
        

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
你的比较器是以长度为标准的,当其长度一致时,被认定为重复,所以没有打印
回复 使用道具 举报
古银平 发表于 2012-5-15 13:54
注意:TreeSetDemo.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked  ...

TreeSet的构造函数没有使用泛型,不影响正常运行
回复 使用道具 举报
本帖最后由 田林 于 2012-5-15 19:10 编辑

楼主实现了Comparator接口,改变了集合ts 中元素的比较方式。

int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));    // int compareTo(Integer anotherInteger) 方法是在数字上比较两个 Integer 对象。

而“aaa”“bbb”“ccc”三个字符串的长度相等,所以他们比较时的结果为0.也就是compare方法的返回值为0,这时程序将认为这两个值相同。

而TreeSet集合中的元素不能重复,所以“bbb”“ccc”将无法存入集合。

可将compare方法改为:
public int compare(Object o1,Object o2)
        {
                String s1=(String)o1;
                String s2=(String) o2;
               
                return s1.compareTo(s2);
               
        }     
这时就OK了。当然用泛型的话更方便,可以省略类型转换。楼主可以看一下毕老师讲泛型的视频。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
田林 发表于 2012-5-15 19:08
楼主实现了Comparator接口,改变了集合ts 中元素的比较方式。

int num=new Integer(s1.length()).compareT ...

谢谢讲解
回复 使用道具 举报
付左军 发表于 2012-5-15 14:01
你的比较器是以长度为标准的,当其长度一致时,被认定为重复,所以没有打印 ...

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