Java利用Comparator与Collections.sort对List排序

时间:2021-12-10 02:50:48

如果List<Object>中Object实现了Comparator接口,便可以直接用以下的方式对List进行排序

如List<String> list,通过list.add("abc")等操作为list添加了一些元素,通过以下代码即可完成排序:

Collections.sort(list)

由于使用了默认的排序规则,所以sort只传入了list这一个参数,但这确实过于局限了,为了是比较更多样化(比较的类多样化或比较方式多样化),可以通过自定义比较类,让其声明Comparator接口,然后重新其中的compare方法即可:

[java] view plaincopyJava利用Comparator与Collections.sort对List排序Java利用Comparator与Collections.sort对List排序
  1. package comXXX;  
  2.   
  3. import java.util.Comparator;  
  4. import java.util.Map;  
  5.   
  6. public class ComparatorMap implements Comparator{  
  7.   
  8.     public int compare(Object arg0, Object arg1) {  
  9.         Map<String, Object> map1 = (Map<String, Object>)arg0;  
  10.         Map<String, Object> map2 = (Map<String, Object>)arg1;  
  11.       
  12.         String map1String = (String) map1.get("filename");  
  13.         String map2String = (String) map2.get("filename");  
  14.       
  15.         return (map1String.toLowerCase()).compareTo(map2String.toLowerCase());  
  16.     }  
  17. }  
程序很简单,类ComparatorMap声明了Comparator接口,故需要实现compare方法。compare方法需要传入两个比较的对象,这里以Map为例(故list中存储的是Map类型的数据)。比较Map中的key值为filename的变量的大小,返回比较结果即可。

在需要排序的地方,对list进行如下操作即可(list类型为List<Map<String, Object>>):

[java] view plaincopyJava利用Comparator与Collections.sort对List排序Java利用Comparator与Collections.sort对List排序
  1. ComparatorMap comparator=new ComparatorMap();  
  2. Collections.sort(list, comparator);  

comparator即为你的自定义比较类,其中有compare方法定义了比较规则。将comparator做为参数传入Collections.sort方法,便可以按照你自定义的规则对List中元素进行排序操作了