TreeSet

/*
 *TreeSet:此处简单实现了将自定义对象存入二叉树结构集合的实例。存入二叉树结构集合的元素,必须具备比较性,或者集合本身具备比较器。
 *
 *对象具备比较性通过其类实现Comparable接口来实现,集合具备比较器通过传入一个Comparator接口的实例对象来实现。若两者同时存在,以比较器的方式为主。
 */

package classfile;

import java.util.*;

public class TreeSetDemo
{
	public static void main(String[] args)
	{
		//TreeSet<Person> ts = new TreeSet<Person>();//通过对象自身的比较方法进行排序

		TreeSet<Person> ts = new TreeSet<Person>(new PersonComparator());//通过比较器的方式进行排序

		ts.add(new Person("zhangsan01",22));
		ts.add(new Person("zhangsan02",21));
		ts.add(new Person("zhangsan03",20));
		ts.add(new Person("zhangsan01",20));
		ts.add(new Person("zhangsan03",22));
		ts.add(new Person("zhangsan01",22));//重复元素

		for(Iterator<Person> iterator = ts.iterator();iterator.hasNext();)
		{
			Person p = iterator.next();

			System.out.println("TreeSet集合中的元素:"+p.getName()+"..."+p.getAge());
		}
	}
}

/**
 *此类实现了Comparable接口,其对象具备了比较性。
 */
class Person implements Comparable<Person>
{
	private String name;
	private int age;

	/**
	 *创建一个Person对象。
	 *
	 *param name
	 *				指定对象的姓名
	 *param age
	 *				指定对象的年龄
	 */
	public Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}

	/**
	 *用于获取对象的姓名。
	 *
	 *return
	 *			返回对象的姓名
	 */
	public String getName()
	{
		return name;
	}

	/**
	 *用于获取对象的年龄
	 *
	 *return
	 *			返回对象的年龄
	 */
	public int getAge()
	{
		return age;
	}

	/**
	 *重写了Comparable接口的compareTo方法,通过对象的age进行主要排序,通过对象的name进行次要排序。
	 *
	 *param p
	 *			一个Person的实例对象
	 *return
	 *			返回比较的结果
	 */
	public int compareTo(Person p)
	{
		System.out.println(this.getName()+"...compareTo..."+p.getName());//查看此方法的被调用行为

		if(this.age>p.age)
		{
			return 1;
		}

		if(this.age==p.age)
		{
			return this.name.compareTo(p.name);
		}

		return -1;

		//return this.name.compareTo(p.name);
	}
}

/**
 *此类实现了Comparator接口,可以根据Person对象的name进行主要排序,通过对象的age进行次要排序。
 */
class PersonComparator implements Comparator<Person>
{
	/**
	 *重写了Comparator的compare方法。
	 *
	 *param p1
	 *			申请存入集合中的元素
	 *param p2
	 *			集合中的元素
	 *return
	 *			返回两个对象比较的结果
	 */
	public int compare(Person p1,Person p2)
	{
		System.out.println(p1.getName()+"...compare..."+p2.getName());//查看此方法被调用的行为

		int number = p1.getName().compareTo(p2.getName());

		if(number>0)
		{
			return 1;
		}

		if(number==0)
		{
			return Integer.valueOf(p1.getAge()).compareTo(p2.getAge());
		}

		return number;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值