import java.util.*;
/*
当元素自身不具备比较性时,或者具备的不是所需要的
这是需要让容器具备比较性
定义比较器,将比较器传递给treeset集合的构造函数
但两种排序都存在,一比较器为主
*/
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());
}
}
}
|
|