zoukankan      html  css  js  c++  java
  • TreeSet比较器

    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]

  • 相关阅读:
    Mybatis类型转换介绍
    简单的快捷方式
    一位资深程序员大牛给予Java初学者的学习路线建议
    题目1014:排名-----------------------此题是一个坑----------------------------------结构体还是用纯c语言不要夹杂c++
    题目1013:开门人和关门人----没有AC掉
    题目1038:Sum of Factorials
    题目1036:Old Bill------简单的模拟
    九度 题目1031:xxx定律
    九度 题目1020:最小长方形
    九度 题目1006:ZOJ问题-----------------我没有A掉
  • 原文地址:https://www.cnblogs.com/youning/p/7372306.html
Copyright © 2011-2022 走看看