Collections.sort排序的用法

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这个参数。
 

 

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的时候需要排列在最后面而已,所以有了上面的排序代码。通用的代码如下:

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)