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;//从大到小排序
}
}
java之TreeMap :自然排序和定制排序