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<Scene> scenes =  new  HashSet<Scene>( 0 );是Set集合,所以没有重复的元素。  
  9. private  List<Scene> sceneList =  new  ArrayList<Scene>( 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<Scene> scenes = new HashSet<Scene>(0);是Set集合,所以没有重复的元素。
private List<Scene> sceneList = new ArrayList<Scene>(0); 有因为Collections

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

 

Java代码
  1. Scene实 体要实现Comparable接口,所以必须实现其中的方法。  
  2. public   class  Scene  extends  BaseEntity  implements  Comparable<Scene>{  
  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<Scene>{
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.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值