黑马程序员---comparator和泛型笔记详解

                                            ------- android培训java培训、期待与您交流! ----------

 

 实现comparator方式排序

 

 /*

 

 当元素自身不具备比较性时,或者具备的不是所需要的

  这是需要让容器具备比较性

  定义比较器,将比较器传递给treeset集合的构造函数

  但两种排序都存在,一比较器为主*/

 import java.util.*;

class Student implements Comparable//在tree中学生类必须要实现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("此对象不是学生");

 Student stu=(Student)obj;

 if(this.age>stu.age)

 return 1;

 if(this.age==stu.age)//如果年龄相同则比较姓名

{

 return this.name.compareTo(stu.name);

}

      return -1;

}

public String getName()

{

return name;

}

public int getAge()

{

return age;

}

 

}

//自定义一个比较器按姓名来排序

class Mycompart implements Comparator

{

public int compare(Object obj1, Object obj2)

{

Student s1=(Student)obj1;

Student s2=(Student)obj2;

 

 int num=s1.getName().compareTo(s2.getName());

 if(num==0)

{

      return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));

    }

 return num;

 

}

}

class Treesetdemo2 

{

public static void sop(Object obj)

{

System.out.println(obj);

}

public static void main(String[] args) 

{

TreeSet ts=new TreeSet(new Mycompart());

ts.add(new Student("wwu1",34));

ts.add(new Student("wwu2",264));

ts.add(new Student("wwu2",24));

ts.add(new Student("wwurtr3",54));

ts.add(new Student("wwu3",5564));

ts.add(new Student("wwu3",54));

ts.add(new Student("wwu3",57674));

ts.add(new Student("wwu4",38));

for (Iterator it=ts.iterator();it.hasNext() ; )

Object obj=it.next();

Student stu=(Student)obj;

 

 

sop(stu.getName()+"---"+stu.getAge());

}

}

}

                    泛型

                          泛型的好处

将运行是的错误,转移到编译时期

方便程序员解决问题,让运行问题减少安全\

为了不让不同的方法可以操作不同的类型,而且类型还不确定

那么可以将泛型定义在方法上、

 特殊之处静态方法不可以访问类上定义的泛型

如果静态方法操作不确定,可以将类型定义在静态方法上

 

class Demo<T>

{

 

     public void get(T t)

      {

 

System.out.println("get=="+t);

 }

 public <Q> void show(Q q)

      {

 System.out.println("show()=="+q);

 

 }

 public static <S> void  statics(S s)

    {

 System.out.println("static()=="+s);

 

 }

}

class Fanxin 

{

public static void main(String[] args) 

{

Demo<String> d=new Demo<String>();

d.get("hah");

d.show(999);

d.statics("wwwww");

}

}

         泛型的限定:

 

? extends E :可以接受e类型或者子类型 上限。

? super E:可以接受E类型的或者E类型的父类,:下限

泛型限定是用于泛型扩展用的

 

转载于:https://www.cnblogs.com/anxianjie/archive/2012/11/28/2793542.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值