import java.util.*;
//用Comparable 实现自定义类型的排序
class Person //implements Comparable
{
public String name;
public int age;
public Person (String name,int age)
{
this.name=name;
this.age=age;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Person ))
return 0;
Person p=(Person)obj;
if(this.age>p.age)
return 1;
else
if(this.age==p.age) //这个判断决定着该元素是否可以存进容器,另个两个负责排序,所以,这个在主要比较条件相同的时候,还要判断次比较条件
{
return this.name.compareTo(p.name);
}
else
return -1;
}
}
//下面用Comparator 接口实现排序
class Mycompare implements Comparator<Person>
{
public int compare(Person a,Person b)
{
int num= (new Integer(a.age).compareTo(new Integer(b.age)));
return num==0?a.name.compareTo(b.name):num;
}
}
public class TreeSetTest {
public static void main(String args[])
{
/*TreeSet treeset =new TreeSet();
treeset.add(new Person ("boy",20));
treeset.add(new Person ("girl",21));
treeset.add(new Person ("person",16));
treeset.add(new Person ("animal",20)); 如果添加的是new Person ("animal",20);的话,这个值将不会被添加进去,因为定义的只是
按年龄进行排序,而compareTo 里面定义的如果年龄相同,返回的则是0,所以这是不正确的,compareTo 返回0的情况就相当于equals 方法,所以这个方法
在写的时候应该考虑全面,什么样的对象才算 相同的,一般在自定义类型排序的时候,在主要条件相同的时候,还要按次要条件进行排序
for(Iterator it=treeset.iterator();it.hasNext();)
{
Person p=(Person)it.next();
System.out.println(p.name+"...."+p.age);
}
System.out.println(new Integer(1).compareTo(new Integer(3)));*/
}}
/*
* 总结: return -1;
* return 1; 这两个只是负责排序,可以根据需要进行
* return 0 这个返回值是判断这个元素是否可以添加进容器内,因此在书写这个方法时要小心,不要看着两个元素的比较元素相同就
* 盲目的 return 0 ,因为两个元素的比较元素相同,但不代表着这两个元素就是相同的,所以你还要判断其非主要比较元素
* 如果 :对Person 类进行排序,如果 this.age==p.age 那么就还要比较其name 如果 this.name= p.name 那么这两个元素才算得上相同,
* 所以在this.age == p.age 有情况下,还要接着 return this.name.coompareTo (p.name)
*
*
*
*
*
//-------------------------------------------------------------------------------------------
//下面是用实现Comparator来排序的实例
TreeSet <Person> treeset = new TreeSet<Person>(new Mycompare());
treeset.add(new Person("boy",20));
treeset.add(new Person ("girl",18));
treeset.add(new Person ("Person",25));
treeset.add(new Person("man",18));
for(Iterator<Person> it=treeset.iterator();it.hasNext();)
{
Person p=it.next();
System.out.println(p.name+"..."+p.age);
}
}
} 2011/10/27 18:38:21
*/