TreeSet 存储自定义类型时CompareTo 方法应该怎么写

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
{
	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  treeset = new TreeSet(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 it=treeset.iterator();it.hasNext();)
		{
			Person p=it.next();
			System.out.println(p.name+"..."+p.age);
		}
	
	
	
	
	}
}												2011/10/27  18:38:21
*/


 

你可能感兴趣的:(Java基础)