• 《java入门第一季》之TreeSet存储自定义对象并保证排序和唯一


    上一篇用一个简单的例子,介绍了treeset集合存储的内部过程,这里再完善其存储自定义对象保证唯一。

    需求:A:
     * 自然排序,按照年龄从小到大排序
     *         B:
     * 成员变量值都相同即为同一个元素


    自定义学生类给了出来:

    public class Student implements Comparable<Student> {
    	private String name;
    	private int age;
    
    	public Student() {
    		super();
    	}
    
    	public Student(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 int compareTo(Student s) {
    		 //return 0;//返回0认为除了第一个根节点外,都是重复元素。相等不搭理,因为为0,认为都不搭理
    		// return 1;//怎么进去怎么出来。大于零右排,1大于零全部右排
    		// return -1;//怎么进去怎么倒着出来。小于零左排,-1小于零全部左排了
    
    		//从上面看出。s是第一个,为根节点
    		// 这里返回什么,其实应该根据我们的排序规则来做
    		// 按照年龄排序,主要条件
    
    		int num = this.age - s.age;
    		// 次要条件
    		// 年龄相同的时候,还得去看姓名是否也相同
    		// 如果年龄和姓名都相同,才是同一个元素
    		int num2 = (num == 0 ? this.name.compareTo(s.name) : num);//二级比较比较年龄
    		return num2;
    	}	
    }
    测试类给了出来:
    public class TreeSetDemo2 {
    	public static void main(String[] args) {
    		// 创建集合对象
    		TreeSet<Student> ts = new TreeSet<Student>();
    
    		// 创建元素
    		Student s1 = new Student("linqingxia", 27);
    		Student s2 = new Student("zhangguorong", 29);
    		Student s3 = new Student("wanglihong", 23);
    		Student s4 = new Student("linqingxia", 27);
    		Student s5 = new Student("liushishi", 22);
    		Student s6 = new Student("wuqilong", 40);
    		Student s7 = new Student("fengqingy", 22);
    
    		// 添加元素
    		ts.add(s1);
    		ts.add(s2);
    		ts.add(s3);
    		ts.add(s4);
    		ts.add(s5);
    		ts.add(s6);
    		ts.add(s7);
    
    		// 遍历
    		for (Student s : ts) {
    			System.out.println(s.getName() + "---" + s.getAge());
    		}
    	}
    }
    

    打印结果:

    fengqingy---22
    liushishi---22
    wanglihong---23
    linqingxia---27
    zhangguorong---29
    wuqilong---40


    存储自定义对象其实就是多了比较规则而已,本质上不变的。

  • 相关阅读:
    OpenFire源码学习之十九:在openfire中使用redis插件(上)
    OpenFire源码学习之十八:IOS离线推送
    OpenFire源码学习之十七:HTTP Service插件
    OpenFire源码学习之十六:wildfire
    OpenFire源码学习之十五:插件开发
    OpenFire源码学习之十四:插件管理
    OpenFire源码学习之十三:消息处理
    数据挖掘入门
    iOS小技巧
    图片加载完成之前对图片高度侦测
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299689.html
Copyright © 2020-2023  润新知