list 的自定义排序 Collection.sort()方法个人学习总结

对于list类型的排序方法:利用Collection.sort()方法   sort()方法默认的是自然排序(也就是升序)

如果想要自定义排序如降序,则重新实现的sort()方法中的比较器。

自定义排序方法要实现或重写comparator比较器。

关键技术点是

使用java.util.Collections类的sort方法可以对List中的元素进行排序,默认是按照升序排序。
用户可以指定排序用的比较器(java.util.Comparator),Comparator是一个接口,用户自定义的比较器必须实现这个接口。

 

import java.util.Comparator;


class MyIntComparator implements Comparator{

 
 public int compare(Object o1, Object o2) {
  int i1 = ((Integer)o1).intValue();
  int i2 = ((Integer)o2).intValue();
  if (i1 < i2){
   return 1;
  }
  if (i1 > i2){
   return -1;
  }
  return 0;
 }
}

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class SortList {
 
 public static void output(List list){
  if (list == null){
   return;
  }
  for (int i=0; i<list.size(); i++){
   System.out.print(list.get(i).toString() + " ");
  }
  System.out.println();
 }
 
 public static void main(String[] args) {
  List list = new ArrayList();
  list.add(new Integer(5));
  list.add(new Integer(8));
  list.add(new Integer(1));
  list.add(new Integer(3));
  list.add(new Integer(2));
  list.add(new Double(3.1));
  System.out.println("list开始状态");
  SortList.output(list);
  //Collections.sort方法将用默认比较器排列list的元素
  Collections.sort(list);
  System.out.println("list被默认比较器排序后的状态");
  SortList.output(list);
  //下面将list的元素按降序排列
  Collections.sort(list, new MyIntComparator());
  System.out.println("list被自定义比较器排序后的状态");
  SortList.output(list);
  
  //因此,对于任意自定义类的对象,当保存在集合类容器中后,如果需要对它们进行排序,
  //需要自己提供适应于自定义类的比较器,自定义比较器必须实现Comparator接口。
  //然后采用Collections.sort(list, comparator);方法对容器进行排序。
 }
}





对list<泛型>自定义排序:

(1)例如 list<user> 对该list中user对象的age进行降序,实现方法有:

user类中实现Comparable接口然后重写compareTo()方法
 @Override  
    public int compareTo(A a) {  
        return this.age.compareTo(a.getAge()); (默认升序)

/* 降序重写比较器

if(this.age> a.getAge()) {

return -1;
    }else{

return 1;

} */

使用自定义排序:Collection.sort(list)

(2)如果user类中没有实现Comparable接口,根据Collections.sort重载方法实现

Collections.sort(listB, new Comparable<B>()) {
@Override
public int compare(B b1, B b2) {
return b1.getOrder().compareTo(b2.getOrder);(默认升序)

/** 自定义降序

if(b1.getAge> b2.getAge()) {

return -1;
    }else{

return 1;

**/
}
};


自己总结可能有不对的地方,还望指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值