java中TreeSet集合

package frank;
import java.lang.*;
import java.util.TreeSet;
import java.util.Comparator;

/**
 *  TreeSet 数集合,他是SortedSet接口的实现类,自动排序。
 * */
public class App
{
	public static void main(String[] args)throws Exception
	{
		TreeSet ts = new TreeSet();
		ts.add(5);
		ts.add(2);
		ts.add(10);
		ts.add(-9);
		ts.add(5);//如果存在将不添加进去。
		System.out.println(ts);//自动从大到小自动排序。
		System.out.println(ts.first());//输出集合中的第一个元素
		System.out.println(ts.last());//输出集合中的最后一个元素
		System.out.println(ts.headSet(4));//输出集合中小于4的集合,但是不包含4
		System.out.println(ts.tailSet(5));//输出大于5的子集,如果Set中包含5,那么也输出5
		System.out.println(ts.subSet(-9,5));//输出大于等于-9,小于5的子集
		/**
		 *输出结果:
		 [-9, 2, 5, 10]
		-9
		10
		[-9, 2]
		[5, 10]
		[-9, 2]
		 * 
		 *TreeSet采用自然排序和定制排序来进行排序,默认是自然排序
		 * */

		TreeSet ts2 = new TreeSet();
		//ts2.add(new Err());//试图把一个没有实现Comparable接口的对象添加到TreeSet集合里面去就会报错。
		//ts2.add(new String("1"));
		//ts2.add(new TreeSet());//TreeSet里面添加的必须是同一类的对象,不然会发生类转换异常。
		ts2.add(new Z(6));//自定义类必须实现接口Comparable
		System.out.println(ts2.add(new Z(6)));//添加同样的元素
		((Z)(ts2.first())).age = 9;//修改第一个对象age
		System.out.println(((Z)ts2.first()).age+"---"+ts2.size());//访问第一个元素是否修改。
		/******定制排序******/
		TreeSet ts3 = new TreeSet(new Comparator()
		{
			public int compare(Object obj1,Object obj2)
			{
				M m1 = (M)obj1;
				M m2 = (M)obj2;
				return m1.age > m2.age ? -1 : m1.age < m2.age ? 1 :0;
			}
		});
		ts3.add(new M(5));
		ts3.add(new M(-3));
		ts3.add(new M(9));
		System.out.println(ts3);
	}
}
class Z implements Comparable
{
	int age;
	public Z(int age)
	{
		this.age = age;
	}	
	public boolean equals(Object obj)
	{
		return true;
	}
	public int compareTo(Object obj)
	{
		return 1;//始终不相等,所以就算跟自己相同的对象也能添加进来。
	}
}
class Err
{
	
}
class M
{
	int age;
	public M(int age)
	{
		this.age = age;
	}
	public String toString()
	{
		return "M[age:"+this.age+"]";
	}
}

  

posted on 2013-10-21 13:40  wp456  阅读(407)  评论(0)    收藏  举报

导航