Collections.sort排序的用法

Java 代码
  1. private   void  sortScene(Movie m){  
  2.   if (m !=  null ){  
  3.    m.getSceneList().addAll(m.getScenes());     
  4.    //Sort the Scene List   
  5.    Collections .sort(m.getSceneList());     
  6.      }  
  7.  }  
  8.      因 为Movie实体里面的private  Set scenes =  new  HashSet( 0 );是Set集合,所以没有重复的元素。  
  9. private  List sceneList =  new  ArrayList( 0 ); 有因为Collections .sort(List list) 里面需要List,  
  10. 所以就构造了sceneList这个参数。  
  11.    
private void sortScene(Movie m){
  if(m != null){
   m.getSceneList().addAll(m.getScenes());   
   //Sort the Scene List
   Collections

.sort(m.getSceneList());   
     }
 }
     因为Movie实体里面的private Set scenes = new HashSet(0);是Set集合,所以没有重复的元素。
private List sceneList = new ArrayList(0); 有因为Collections

.sort(List list)里面需要List,
所以就构造了sceneList这个参数。
 

 

Java代码
  1. Scene实 体要实现Comparable接口,所以必须实现其中的方法。  
  2. public   class  Scene  extends  BaseEntity  implements  Comparable{  
  3. public   int  compareTo(Scene o) {  
  4. int  ret =  this .seq ==  null  ? (o.seq ==  null  ?  0  : - 1 ): (o.seq ==  null  ?  1  : ( this .seq== 0 ?(o.seq== 0 ? 0 : 1 ):(o.seq ==  0 ?- 1 :( this .seq - o.seq))));  
  5.     if  (ret ==  0 ) {  
  6.         return   this .getId().compareTo(o.getId());  
  7.     } else  {  
  8.         return  ret >  0  ?  1  : - 1 ;  
  9.     }  
  10.    }  
  11. }  
Scene实体要实现Comparable接口,所以必须实现其中的方法。
public class Scene extends BaseEntity implements Comparable{
public int compareTo(Scene o) {
int ret = this.seq == null ? (o.seq == null ? 0 : -1): (o.seq == null ? 1 : (this.seq==0?(o.seq==0?0:1):(o.seq == 0?-1:(this.seq - o.seq))));
	if (ret == 0) {
		return this.getId().compareTo(o.getId());
	} else {
		return ret > 0 ? 1 : -1;
	}
   }
}

 上面是当seq=0的时候需要排列在最后面而已,所以有了上面的排序代码。通用的代码如下:

Java代码
  1. public   int  compareTo(Scene o) {  
  2.   int  ret =  this .seq== null ?(o.seq== null ? 0 :- 1 ):(o.seq== null ? 1 :( this .seq - o.seq));  
  3.   if (ret ==  0 )  
  4.   {  
  5.    return   this .getId().compareTo(o.getId());  
  6.   }else {  
  7.    return  ret> 0 ? 1 :- 1 ;  
  8.   }  
  9.  }  
public int compareTo(Scene o) {
  int ret = this.seq==null?(o.seq==null?0:-1):(o.seq==null?1:(this.seq - o.seq));
  if(ret == 0)
  {
   return this.getId().compareTo(o.getId());
  }else{
   return ret>0?1:-1;
  }
 }

 

   要充分理解排序就必须先理解最后的return 0, -1 , 1  这三个数字代表的含义。它们不是代表数字而是代表前面和后面要比较的值哪个大哪个小?如果是0表示要比较的这两个数字相等。如果是1表示前面数字大,如果 -1表示前面数字小。要理解这个就没问题了。

    在写这个比较规则的时候,千万不要想着套数字进去来进行比较,就想着前面数字和后面数字比较,如果前面大就return 1,否则return -1.

你可能感兴趣的:(Collections.sort排序的用法)