欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TreeSet比较器

程序员文章站 2022-07-09 22:42:33
...

TreeSte:二叉树数据结构。可以对元素进行排序,不同步的

如何保证元素唯一性?

参考的就是比较犯法的返回值是否是0,是,就是重复元素,不存。

排序方式:需要元素具备比较功能,所以元素需要实现Comarable接口。覆盖CompareTo方法。

 

需求中也有这样一种情况:元素具备的比较功能不是所需要的,也就是说不想按照自然

排序的方式,而是按照自定义的排序方式对元素进行排序。

而且,存储到TreeSTet中的元素万一没有比较功能该如何排序呢?比如学生类是别人写的,没有定义学生类的排序方法。

这时候,就只能使用第二种比较方式:是让集合具备比较功能,定义一个比较器

 

实现Comparator接口,覆盖compare方法。将Comparator接口的对象,

作为参数传递给TreeSet集合的构造函数

 

比较器更为灵活,自然排序通常作为元素的默认排序

package java_test;

 class Students implements Comparable{
	private String name;
	private int age;
	
	
	public Students() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Students(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Students [name=" + name + ", age=" + age + "]";
	}
	@Override
	public int compareTo(Object o) {
		// TODO Auto-generated method stub
		return 0;
	}

	
 }
 
 
 
	
	

  ======================

package java_test;

import java.util.Comparator;

/**
 * 自定义一个比较器,用来对学生对象按照姓名进行排序	
 * @author ningpuyong
 *
 */
public class ComapretoByName implements Comparator {

	@Override
	public int compare(Object o1, Object o2) {
		
		Students s1 = (Students)o1;
		Students s2 = (Students)o2;
		
		int temp= s1.getName().compareTo(s2.getName());
		
		return temp==0?s1.getAge()-s2.getAge():temp;
	}

}

  ===============

package java_test;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class TreeSetDemo2 {
	public static void main(String[] args) {
		
		//初始化TreeSet集合时明确一个比较器。让集合具备比较性,把元素直接存进来就行
		Set set = new TreeSet(new ComapretoByName());
		
		
		set.add(new Students("xiaozhang",25));
		set.add(new Students("xiaoming",21));
		set.add(new Students("daniu",22));
		set.add(new Students("tudou",27));


		for (Iterator it = set.iterator(); it.hasNext();) {
			Students stu = (Students) it.next();
			System.out.println(stu);

		}
	}
}

  ========

运行结果:

 

Students [name=daniu, age=22]

Students [name=tudou, age=27]

Students [name=xiaoming, age=21]

Students [name=xiaozhang, age=25]