------- 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类型的父类,:下限
泛型限定是用于泛型扩展用的