list集合实现自定义排序

1.基本数据类型的简单排序

public class Demo01 {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1,5,2,0,-1);
        Collections.sort(list);
        System.out.println(list);
    }
}

(1)Collections.sort(list)分析:

@SuppressWarnings("unchecked")
    public static <T extends Comparable<? super T>> void sort(List<T> list) {
        list.sort(null);
    }

需要继承Comparable,在我们的基本数据类型的包装类中,都是实现了Comparable接口,同时实现了compareTo方法。

2.实体类按照属性排序

(1)自定义类:

//首先必须要实现Comparable接口,并重写compareTo方法--》compareTo是进行排序的一种规范
//一般不建议使用,真实开发中,实体类尽量不要去进行修改
class Emp implements Comparable{
   private Integer id;
   private String name;

   public Emp() {
   }

   public Emp(Integer id, String name) {
       this.id = id;
       this.name = name;
   }

   public Integer getId() {
       return id;
   }

   public void setId(Integer id) {
       this.id = id;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   @Override
   public String toString() {
       return "Emp{" +
               "id=" + id +
               ", name='" + name + '\'' +
               '}';
   }

   @Override
   public int compareTo(Object o) {
       //需要强制转化
       Emp emp = (Emp)o;
       return this.id.compareTo(emp.id);
   }
}
public class Demo01 {
   public static void main(String[] args) {
       List<Emp> list = Arrays.asList(new Emp(5,"张三"),new Emp(2,"王五"));
       Collections.sort(list);
       System.out.println(list);
   }
}

和第一个案例的Integer是一样的,只要实现Comparable即可使用Collections.sort方法进行排序。

(2)此方法推荐使用:

public class Demo01 {
    public static void main(String[] args) {
        List<Emp> list = Arrays.asList(new Emp(5,"张三"),new Emp(2,"王五"));
        Collections.sort(list, new Comparator<Emp>() {
            @Override
            public int compare(Emp o1, Emp o2) {
                return o1.getId().compareTo(o2.getId());
            }
        });
        System.out.println(list);
    }
}

---------------源码分析(Collections)-------------------
public static <T> void sort(List<T> list, Comparator<? super T> c) {
    list.sort(c);
}

可以通过匿名内部类的形式,直接重写compareTo方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值