java之TreeMap :自然排序和定制排序

import java.util.Comparator;
import java.util.TreeMap;
 
public class Test {  
    public static void main(String[] args) 
    {  
    	System.out.println("使用自然排序:(键类实现了compareTo接口)");
    	TreeMap<Id, String> treeMap=new TreeMap<Id,String>();
    	treeMap.put(new Id(1000), "demo1");
    	treeMap.put(new Id(1001), "demo2");
    	treeMap.put(new Id(1002), "demo3");
    	treeMap.put(new Id(1003), "demo4");
    	treeMap.put(new Id(1004), "demo5");
    	System.out.println("treeMap="+treeMap);
    	
    	
    	//使用钉子排序,指明比较器
    	System.out.println("使用定制排序:(从小到大排序)");
    	TreeMap<Id, String> treeMap2=
    			new TreeMap<Id,String>(new MyComparatorBigToSmall());
    	treeMap2.put(new Id(1000), "demo1");
    	treeMap2.put(new Id(1001), "demo2");
    	treeMap2.put(new Id(1002), "demo3");
    	treeMap2.put(new Id(1003), "demo4");
    	treeMap2.put(new Id(1004), "demo5");
    	System.out.println("treeMap2="+treeMap2);
    	
    	System.out.println("使用定制排序:(从大到小排序)");
    	TreeMap<Id, String> treeMap3=
    			new TreeMap<Id,String>(new MyComparatorSmallToBig());
    	treeMap3.put(new Id(1000), "demo1");
    	treeMap3.put(new Id(1001), "demo2");
    	treeMap3.put(new Id(1002), "demo3");
    	treeMap3.put(new Id(1003), "demo4");
    	treeMap3.put(new Id(1004), "demo5");
    	System.out.println("treeMap3="+treeMap3);
    }  
}  

  //自定义比较器:实现comparator接口
class MyComparatorBigToSmall implements Comparator<Id> //使用泛型
{  
	@Override
	public int compare(Id o1, Id o2) {
		return o1.getIdNumber()-o2.getIdNumber();//从小到大排序
	}
} 

class MyComparatorSmallToBig implements Comparator<Id>
{
	@Override
	public int compare(Id o1, Id o2) {
		return o2.getIdNumber()-o1.getIdNumber();//从大到小排序
	}
}

//Id作为键的类实现Comparable接口
class Id implements Comparable<Id>
{
	//成员属性
	private int IdNumber;
	public int getIdNumber()
	{
		return IdNumber;
	}
	//构造函数
	public Id() {
		// TODO Auto-generated constructor stub
	}
	//构造函数
	public Id(int IdNumber)
	{
		this.IdNumber=IdNumber;
	}
	//重写toString()方法
	@Override
	public String toString() {
		return "["+this.IdNumber+"]";
	}
	//重写equals()方法
	@Override
	public boolean equals(Object obj) 
	{
		if(obj==this)//自己和自己比较
			return true;//那就是同一个相等了
		//传入的引用不为空,而且两个的类型一样
		if(obj!=null&&obj.getClass()==this.getClass())
		{
			Id idNumber2=(Id) obj;//类型转换
			return this.IdNumber==idNumber2.IdNumber;
			//如果两个的编号一样,那就认为相等
		}
		return false;
	}
	//重写hashCode()方法
	@Override
	public int hashCode() {
		return this.IdNumber*100;
	}
	
	//重写compareTo()方法实现自然排序
	@Override
	public int compareTo(Id o) 
	{
		//return this.IdNumber-o.IdNumber;//从小到大排序:
		return o.IdNumber-this.IdNumber;//从大到小排序
	}
}

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值