【TreeSet】自然排序与比较器排序

1.自然排序


对象类:
public class Examinee implements Comparable
   
    {//实现接口
	private int scorce;

	//构造方法与get、set方法略

	@Override
	public String toString() {
		return this.getScorce()+"";
	}
	/**
	 * 重写的compareTo方法
	 */
	@Override
	public int compareTo(Examinee o) {
		return o.getScorce() - this.getScorce();
	}
}

   

测试类:

import java.util.TreeSet;

public class TreeSetTest {

	public static void main(String[] args) {
		//TreeSet自然排序
		TreeSet
   
     ts = new TreeSet
    
     ();
		
		ts.add(new Examinee(66));
		ts.add(new Examinee(93));
		ts.add(new Examinee(52));
		ts.add(new Examinee(75));
		ts.add(new Examinee(83));
		
		System.out.println(ts);//[93, 83, 75, 66, 52]
	}

}
    
   

要点:使用TreeSet自然排序法时需要实现Comparable接口,并将泛型注为当前对象类,然后重写compareTo();方法。

关于compareTo方法的使用方法:

@override

public int compareTo(类名 形参){

return 形参.返回int类型的方法 - this.与前面相同的方法;

//从大到小排序。若从小到大只需交换减数与被减数

}

2.比较器排序

对象类:

public class Examinee{//不实现接口
	private int scorce;

    //构造方法与get、set方法略
	
	@Override
	public String toString() {
		return this.getScorce()+"";
	}
	/**
	 * 不在此重写compareTo方法。适用于不允许修改,无法实现Comparable接口的类
	 */
}
测试类:

import java.util.Comparator;
import java.util.TreeSet;

public class TreeSetTest {

	public static void main(String[] args) {
		//TreeSet比较器排序
		TreeSet
   
     ts = new TreeSet
    
     (new Comparator
     
      () {
			//使用匿名内部类
			@Override
			public int compare(Examinee o1, Examinee o2) {
				return o1.getScorce() - o2.getScorce();
			}
		});
		
		ts.add(new Examinee(66));
		ts.add(new Examinee(93));
		ts.add(new Examinee(52));
		ts.add(new Examinee(75));
		ts.add(new Examinee(83));
		
		System.out.println(ts);//[52, 66, 75, 83, 93]
	}
}

     
    
   

要点:使用TreeSet比较器排序法时不需要实现Comparable接口,只在新建TreeSet时使用匿名内部类重写compareTo方法即可。当对象类为Java内部类或其他没有修改权限的类时可以使用此方法。效果与自然排序相同。在重写compareTo方法时要注意两个形参属性相减的顺序。

TreeMap的key排序操作同理。

关于匿名内部类可以参考http://blog.csdn.net/spixii/article/details/52336883


版权声明:本文为Spixii原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。