TreeSet介绍

一、TreeSet介绍
TreeSet的数据结构可以理解为是二叉树数据结构,我们可以使用TreeSet实现排序功能,TreeSet通过定义一个比较容器Comparator来完成集合对象中的排序。

二、TreeSet代码示例

public class Student{
	//属性
	private String name;
	private int age;
	//写操作
	public void setName(String name){
		this.name=name;
	}
	//读操作
	public String getName(){
		return name;
	}
	public int getAge(){
		return age;
	}
	public void setAge(int age){
		this.age=age;
	}
}

再定义一个类,在这个类中我们定义了一个TreeSet类的对象。尝试往里面添加几个学生对象。

public class TreeStu{
	public static void main(String []args){
		Student student1=new Student();
		student1.setName("张三1");
        student1.setAge(12);
        
        Student student2=new Student();
        student2.setName("张三2");
        student2.setAge(13);
        
        Student student3=new Student();
        student3.setName("张三3");
        student3.setAge(10);
        
        Student student4=new Student();
        student4.setName("张三4");
        student4.setAge(80);
        TreeSet set=new TreeSet();
        set.add(student1);
        set.add(student2);
        set.add(student3);
        set.add(student4);
	}
}

运行程序,抛出了异常:
在这里插入图片描述
虽然上面的代码非常简单,没有任何逻辑,仅仅只是添加了几个数据,但是程序还是出错了,这是因为TreeSet在添加数据的时候,就必须要求数据按照一定的顺序进行组织,这也是二叉树的一个特点。所以我们需要给TreeSet设置一个比较器。
先新建一个类MyTreeComparator实现接口Comparator:

public class MyTreeComparator implements Comparator{
//比较的方法
	@Override
	public int compare(Object o1,Object o2){
		Student student1=(Student)o1;
		Student student2=(Student)o2;

		if(student1.getAge()>student2.getAge()){
			return -1;
		}else if(student1.getAge()<student2.getAge()){
			return 1;
		}
		return 0;
	}
}

在java.util.Comparator接口的定义中,最重要的是compare(T o1,T o2)方法,该方法一般返回值为负数、0和正数,一般选用-1,0,1
-1:表示o1权重小于o2
0:表示o1权重等于o2
1:表示o1权重大于o2
Comparator的compare()方法交给被传入的TreeSet自行调用,不需要开发时程序员去调用.
然后 修改上面的TreeStu类,在构造TreeSet时设置比较器,然后添加数据.

public class TreeStu{
	public static void main(String []args){
		Student student1=new Student();
		student1.setName("张三1");
        student1.setAge(12);
        
        Student student2=new Student();
        student2.setName("张三2");
        student2.setAge(13);
        
        Student student3=new Student();
        student3.setName("张三3");
        student3.setAge(10);
        
        Student student4=new Student();
        student4.setName("张三4");
        student4.setAge(80);

		//把比较器传给TreeSet
		MyTreeComparator comparator=new MyTreeComparator();
		Tree set=new TreeSet(comparator);
		
        set.add(student1);
        set.add(student2);
        set.add(student3);
        set.add(student4);

		System.out.println(set.size());
		Iterator iterator=set.iterator();
		while(iterator.hashNext()){
			Student stu=(Student)iterator;
			System.out.println(stu.getName()+":"+stu.getAge());
		}
	}
}

打印出所有的学生信息,学生将会按照年龄进行排序。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值