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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 張帅 中级黑马   /  2013-9-13 08:25  /  2009 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 張帅 于 2013-9-14 08:53 编辑

import java.util.*;//此处为什么需要包,没包编译不通过??
class TreeSetTest
{
        public static void main(String[] args)
        {
                TreeSet ts = new TreeSet(new StrLenComparator());
                ts.add("a");
                ts.add("ab");
                ts.add("abc");
                ts.add("bcdf");
                ts.add("ab");
                Iterator it = ts.iterator();
                while(it.hasNext())
                {
                        System.out.println(it.next());
                }
        }
}
class StrLenComparator implements Comparator
{
        public int compare(Object o1,Object o2)
        {
                String s1 = (String)o1;//在此处为什么将o1强转为字符串s1?
                String s2 = (String)o2;//同上所述......s2?
                int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
                if(num==0)
                        return s1.compareTo(s2);
                        return num;
        }
}

评分

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

查看全部评分

7 个回复

倒序浏览
集合包装在java.util.*包里面的,不到入包。。不能建集合对象
第二个就是Object类型转化为String类型
回复 使用道具 举报
你使用了Set集合,集合包装在java.util包里面的,不引包的话会编译错误,除非你自己定义
程序中compare方法接收的参数是Object,所以要强转为String

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
你编写的类中用到了TreeSet,当声明和实例化时,会找TreeSet类的所在位置,导入import java.util.*;是把所有在util下的类都导入。Object o1,和Object o2 是Object类型的,是所有类的父类,String也是Object的子类,当父类的对象要赋值给子类的对象,必须要想下转型。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
导入包 就相当于别人写好的代码你拿来直接用的,所有的代码都有自己完成显然费时又不显示,也不符合编程的思想啊.
第二个问题,需要强转,是因为参数和数据类型不同,方法接收的是Object类型的参数,用String来接收,当然必须强转为String类型,否则编译报错.

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
关于你的问题,有可能你之前没有接触过计算机编程。所以在编程中出现问题是很正常的。
就像写文章一样,你首先要有格式,你格式正确之后才能写文章。
文章就好比java,java也有他的格式。
第一个问题:TreeSet类需要 java.util.TreeSet;包。所以要导入此包,下面的TreeSet ts = new TreeSet(new StrLenComparator());才能正常执行。
第二个问题: int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));此处要使用String类中的方法,比如length()方法,compareTo()方法,你可以查看API文档中的String类中的方法。
建议:多多理解java基础,多多思考。每个人都是这么走过来的。
回复 使用道具 举报
肖勇 中级黑马 2013-9-13 15:09:23
7#
首先,你用到了TreeSet集合类并直接使用了里面的方法,该类在util包里面,所以你必须先导入该包,才能使用Treeset集合。
为什么要强制转换类型?
因为你集合中所添加的元素是String类型,但是你接受的是任意类型,要根据你代码的需求进行强制转换,你才能进行比较。
回复 使用道具 举报
你使用了Set集合,集合包装在java.util包里面的,不引包的话会编译错误,除非你自己定义

compareTo的2个参数类型都是String类型的,而你的方法传入的是Object,所以需要强转,程序才能正确编译运行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马