JAVA中Comparator的使用

Posted wfwaegwageaw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中Comparator的使用相关的知识,希望对你有一定的参考价值。

关于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对象

 

以上是关于JAVA中Comparator的使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中使用 Comparator 进行排序

JAVA中Comparator的使用

Java中Comparator比较器的使用

Map排序(按key排序,按value排序)

Java中Map集合排序 需要TreeMap 这个集合的构造方法中参数有比较器 面试题:输入字符串,统计ABCD出现次数,由高到低输出字母和出现次数,使用Map集合完成此题

java中Comparable和Comparator两种比较器的区别