My_Java之笔记(8)- 实现TreeSet集合的排序方法

方法一:元素实现Comparable接口,重写compareTo()方法,实现集合排序
方法二:定义一个比较器传给TreeSet的构造函数,该比较器实现Comparator接口,重写compare()方法,实现集合排序

import java.util.TreeSet;
import java.util.Iterator;
import java.util.Comparator;

/**
1.实现Comparable接口,重写compareTo()方法,实现集合排序
*/
class Student implements Comparable
{
  String name;
  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 o = (Student)obj;
  		if(this.age==o.age)
  			return this.name.compareTo(o.name);
  		else if(this.age>o.age)
  			return 1;
  		else 
  			return -1;
  }
  public String toString()
  {
  		return this.name+"-"+this.age;	
  }
}

class Test
{
	public static void main(String[] args)
	{
		TreeSet<Student> ts = new TreeSet<Student>();
		ts.add(new Student("John",20));
		ts.add(new Student("Jack",20));
		ts.add(new Student("Jam",21));
		
		Iterator<Student>it = ts.iterator();
		while(it.hasNext())
		{
			System.out.println(it.next());	
		}
		
		/**
		2.(匿名内部类的方式)实现Comparator接口,重写compare()方法,实现集合排序
		*/
		TreeSet<Student> ts2 = new TreeSet<Student>(
		new Comparator<Student>()
		{
			public int compare(Student sa, Student sb)
			{
				if(sa.age==sb.age)
  				return sa.name.compareTo(sb.name);
  			else if(sa.age>sb.age)
  				return 1;
  			else 
  				return -1;
			}
		}
		);
		
		ts2.add(new Student("John",20));
		ts2.add(new Student("Jack",20));
		ts2.add(new Student("Jam",21));
		System.out.println();	
		
		Iterator<Student>it2 = ts2.iterator();
		while(it2.hasNext())
		{
			System.out.println(it2.next());	
		}
  }
}

测试结果:

Jack-20
John-20
Jam-21

Jack-20
John-20
Jam-21


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值