自然排序和自定义排序演示

本例演示了在TreeSet中添加对象时候可以自动排序的功能:
总结:想要使用jdk自带的排序功能,被排序对象必须实现Comparator(自然排序)或Comparable(自定义排序,需要自定义一个比较器)接口
1、要使用  TreeSet 或者 Collections.sort(), 插入的对象必须排序的功能(相互之间可以比较大小)。
2、compareTo 这个方法会被 TreeSet 自动回调。
4、代码如下:
package com.tiger.comparator;

/**
 * Cat类,目的使Cat加到TreeSet中后,会根据猫的年龄进行排序。
 * @author tiger
 */
class Cat {
	int age;
	String name;
	public Cat(int age, String name) {
		this.age = age;
		this.name = name;
	}
	@Override
	public String toString() {
		return "(age=" + age + ", name=" + name + ")";
	}
}
package com.tiger.comparator;

import java.util.Comparator;
/**
 * 自定义比较器,传入Cat,专门对猫,根据猫的年龄进行排序
 * @author tiger
 * @date 2017年11月4日
 */
class CatComparator implements Comparator
    
    
     
     {
	//自动回调
	@Override
	public int compare(Cat cat1, Cat cat2) {
		int ret = cat1.age - cat2.age;
		return ret;
	}
}
package com.tiger.comparator;

/**
 * Person1类, 实现 Comparable,按照年龄自然排序。
 * @author tiger
 */
public class Person implements Comparable
     
     
      
      {
	
	int age;
	String name;
	
	public Person(int age, String name) {
		this.age = age;
		this.name = name;
	}
	
	/*
	 * 定义排序规则,TreeSet会自动回调这个方法
	 */
	@Override
	public int compareTo(Person p) {
		int ret = this.age - p.age;
		return -ret;
	}
	
	@Override
	public String toString() {
		return "(age = " + age + ", name = " + name + ")";
	}
}package com.tiger.comparator;

import java.text.*;
import java.util.*;
/**
 * 测试类
 * @author tiger
 */
@SuppressWarnings("all")
public class CompaTest {
	public static void main(String[] args) {
		comparable();
		comparator();
		dateComparable();
	}
	/*
	 * 自然排序
	 */
	public static void comparable(){
		System.out.println("--------自然排序---------");
		
		Person p = new Person(1,"李明");
		Person p1 = new Person(21,"佳佳");
		Person p2 = new Person(10,"金晶");
		Person p3 = new Person(9,"濑户");
		
		Set
      
      
       
        set = new TreeSet
       
       
        
        ();
		
		set.add(p);
		set.add(p1);
		set.add(p2);
		set.add(p3);
		
		System.out.println(set);
	}
	/*
	 * 自定义排序
	 */
	public static void comparator(){
		System.out.println("--------自定义排序---------");
		
		Cat[] cats = {new Cat(23, "龙猫"),new Cat(12, "红猫"),new Cat(45, "黑猫"),new Cat(3, "白猫")};
		
		Comparator catCompara = new CatComparator();
		//创建TreeSet对象时,将比较器传入。
		Set set = new TreeSet(catCompara);
		
		Collections.addAll(set, cats);
		
		System.out.println(set);
	}
	/*
	 * 内之类,已经实现了比较接口,不需要自己去写。
	 */
	public static void dateComparable(){
		System.out.println("--------内置类已经实现了Comparable接口---------");
		Set set = new TreeSet();
		SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:ss:mm");
		//获取当前时间
		Date date1 = new Date();
		try {
			Date date2 = sdf.parse("2016-02-12 12:23:12");
			Date date3 = sdf.parse("2012-01-10 15:15:18");
			Date date4 = sdf.parse("2015-09-05 21:23:19");
			set.add(date1);
			set.add(date2);
			set.add(date3);
			set.add(date4);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		System.out.println(set);
	}
}
       
       
      
      
     
     
    
    

5、运行结果如下:
--------自然排序---------
[(age = 1, name = 李明), (age = 9, name = 濑户), (age = 10, name = 金晶), (age = 21, name = 佳佳)]
--------自定义排序---------
[(age=3, name=白猫), (age=12, name=红猫), (age=23, name=龙猫), (age=45, name=黑猫)]
--------内置类已经实现了Comparable接口---------
[Tue Jan 10 15:18:15 CST 2012, Sat Sep 05 21:19:23 CST 2015, Fri Feb 12 12:12:23 CST 2016, Sat Jul 15 13:13:09 CST 2017]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ljt-tiger

thanks

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值