首页 > 技术文章 > JAVA中Comparator的使用

dongfangzhizi 2016-08-27 14:29 原文

关于Collections中的sort方法的使用

 

在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标。

此排序被保证是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。

举个例子:

定义一个User类,内有name和score两个属性。

定义一个ArryList,其内部元素为User对象,如何按照Userscore进行升序排序?

//声明User类型

public class User {

   public String name;

   public int score;

   public User(String name,int score)

   {

      this.name =name;

      this.score = score;

   }

}

//按照User对象的score进行排序,升序排序。需要继承Comparator接口

public class comparator implements Comparator<User>{

   public int compare(User u1,User u2)

   {

      return u1.score - u2.score;

   }

};

public class main {

 

   public static void main(String[] args) {

      // TODO Auto-generated method stub

      ArrayList<User> list = new ArrayList<User>();

      list.add(new User("wangqiang",100));

      list.add(new User("lizeyang",99));

      list.add(new User("linyenan",78));

      list.add(new User("yaojianliang",80));

      list.add(new User("xinhong",66));

      list.add(new User("gaoming",66));

      list.add(new User("liupeng",87));

      Collections.sort(list,new comparator());

      for(User index:list)

      {

         System.out.println(index.score + index.name);

      }

     

   }

  

 

}

最后排序结果为:

66gaoming

78linyenan

80yaojianliang

87liupeng

99lizeyang

100wangqiang

 

另外,如果按照User对象的name属性进行降序排列,那么修改compare类如下:

public class comparator implements Comparator<User>{

   public int compare(User u1,User u2)

   {

      return u2.name.compareTo(u1.name);

   }

};

降序结果为:

xinhong66

wangqiang100

lizeyang99

liupeng87

linyenan78

gaoming66

如果元素本身就是可比较的,且升序。那么默认的Collections.sort(Object)就可以实现。

但是如果需要降序的话,那么就得修改compare方法。比如:string对象

 

推荐阅读