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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德升 中级黑马   /  2012-6-9 23:10  /  1411 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王德升 于 2012-6-20 09:07 编辑

//第一段代码。
import java.util.*;

class TreeSetDemo
{
        public static void main(String[] args)
        {
                TreeSet ts = new TreeSet();

                ts.add(new Student("java01",53));
                ts.add(new Student("java03",33));
                ts.add(new Student("java04",13));
                ts.add(new Student("java05",13));

                Iterator it = ts.iterator();
               
                while(it.hasNext())
                {

                        Student stu = (Student)it.next();
                        System.out.println(stu.getName()+"...."+stu.getAge());

                        
                }

        }        
}

class Student implements Comparable
{
        private String name;
        private int age;

        Student(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        
        public int compareTo(Object obj)
        {
                if(!(obj instanceof Student))
                        throw new RuntimeException("不是学生对象");  //2.
                Student s = (Student)obj;
        
                System.out.println(this.name+"....compare..."+s.name);
               
                if(this.age>s.age)
                        return 1;
                if(this.age==s.age)
                        //return 0;

                return this.name.compareTo(s.name);
                return -1;
        }


        public String getName()
        {
                return name;
        }

        public int getAge()
        {
                return age;
        }
}

/*

D:\java0420\day14>javac TreeSetDemo.java
注: TreeSetDemo.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

D:\java0420\day14>java TreeSetDemo
java01....compare...java01
java03....compare...java01
java04....compare...java01
java04....compare...java03
java05....compare...java03
java05....compare...java04
java04....13
java05....13
java03....33
java01....53


1.为什么我编译java01和java01也比较了一次呢?

2.这里为什么要抛异常,而13天的ArrayList怎么这里没有抛呢?

*/


//第二个问题。

class Utils<QQ>// 1.
{
        private QQ q; //2.

        public void setA(QQ q) //3.
        {
                this.q = q;
        }

        public QQ getB()//4.
        {
                return q; // 5..
        }
}

1.为什么这里放个QQ?
2.为什么出来个q?
3.为什么这里放QQ q?
4.为什么这里要搞QQ类型的?
5.为什么这里返回q

这5个请说的能让我知道来龙去脉,不要说那么浅。谢谢!

点评

看教程吧,教程里面一清二楚~  发表于 2012-6-10 01:06

2 个回复

倒序浏览
本帖最后由 吴小铁你好 于 2012-6-9 23:35 编辑

这是我运行的结果,没有java01与java01的比较,楼主是不是搞错了,
  1. java03....compare...java01
  2. java04....compare...java01
  3. java04....compare...java03
  4. java05....compare...java03
  5. java05....compare...java04
  6. java04....13
  7. java05....13
  8. java03....33
  9. java01....53
复制代码
第二个问题,因为你传入的是Object可能不是Student对象,所以要抛异常啊。
  这个问题在张老师的java加强的泛型要讲到。这是泛型的一种运用,第一个泛型表示QQ为一种类型,这种类型为你任意传入值的类型,比如说你传入String那他就为String,这下面的QQ就都是表示这种类型,q为你传入的参数,setA为设置参数,需要传入值所以就有QQ(类型) q变量。4这QQ类型是返回类型,q为返回值。
回复 使用道具 举报
第一问中,程序我运行的正常啊,没有java 01和java01又比较,你再运行试试。 至于2处跑异常,很明显就是输入的对象类型不正确,在这里抛出运行时异常,为了在编译时仍可以通过。可以不处理。
第二问中;是自定义泛型的例子,QQ表示引用类型,q 表示成员变量,其中 q 是QQ类型的数据。 只是用不同字母的关系。假如你把QQ换成 String  ,q作为一个String 类型的变量,就容易理解了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马