JAVA基础――API(集合类)(二)

2014-11-24 02:36:06 · 作者: · 浏览: 1
mpare(Object o1,Object o2)方法,并将该类(比较器)的对象作为参数传给TreeSet的构造函数中。


注意:自定义类型如果想要创建对象放入TreeSet集合,必须实现Comparable接口,也就是第一种排序方式(元素自身具备比较性),否则TreeSer根本不知道如何排序存储。

存储第一个可能不会报错(还没有调用对象的compareTo方法),但存储第二个就会引发ClassCastException异常。


例子:

/*
将自定义类Person的对象存入TreeSet集合
并用两种方法实现排序:
第一种方法(必须的,否则ClassCastException异常):
	以年龄进行排序,如果年龄相等,则以名字字符串的compareTo方法排序(按字典顺序比较两个字符串),如果名字也相同,视为同一个人。
第二种方法(看需求):
	以名字字符串的compareTo方法排序(按字典顺序比较两个字符串),如果字符串相同,再以年龄进行排序,如果相同视为同一个人。
*/
import java.util.*;
class Person implements Comparable	//第一种方法
{
	private String name;
	private int age;
	Person(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
	public int compareTo(Object obj)	//第一种方法
	{
		Person p=(Person)obj;
		if(this.age>p.age)
			return 1;
		else if(this.age
    
      ts=new TreeSet
     
      (new MyCompare());//第二种方法需要传参数new MyCompare(); ts.add(new Person("lisi01",10)); ts.add(new Person("lisi03",12)); ts.add(new Person("lisi02",11)); ts.add(new Person("lisi04",11)); Iterator
      
        it=ts.iterator(); while(it.hasNext()) { Person p=(Person)it.next(); sop(p.getName()+"....."+p.getAge()); } } } class MyCompare implements Comparator
       
         //第二种方法 PS:这里用了泛型,所以下面compare方法的参数可以不是Object,而且免去强转的麻烦 { public int compare(Person p1,Person p2) { int num=p1.getName().compareTo(p2.getName()); if(num==0) { if(p1.getAge()>p2.getAge()) return 1; else if(p1.getAge()