TreeSet介绍

发表时间:2017-05-09 12:50:50 浏览量( 20 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度

学习过程:

一、TreeSet介绍

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

、TreeSet代码示例

我们先定义一个Student类。代码如下:

   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);

	}

}

运行程序,程序抛出了以下异常:

attcontent/89f56d70-2546-45f8-9704-85f6a8425f8b.png

虽然上面的代码非常简单,没有任何逻辑,仅仅只是添加了几个数据,但是程序还是出错了,这是因为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();
		TreeSet 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.hasNext()){
			Student stu=(Student)iterator.next();
			System.out.println(stu.getName()+":"+stu.getAge());
		}
		
		
	}

}

打印出所有的学生信息,学生将会按照年龄进行排序。