java-Collections的sort集合排序方法

2 篇文章 0 订阅
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class CollectionsDemo {
    public static void main(String[] args) {
        /**
         * Collections.sort方法实现排序
         * Collections是集合的工具类,它提供了很多便于我们操作集合的方法
         * 其中就有用于集合排序的sort方法
         * -void sort(List<T> list):该方法的作用是对给定的集合元素进行自然排序
         * 
         * 在使用Collecions的sort排序的集合元素都必须是Comparable接口的实现类,该接口表示其子类是可比较的
         * 因为实现该接口必须重写抽象方法:-int compareTo(T t)
         * 
         * 自然排序(Collections.sort(list)):list集合中的元素必须实现Comparable接口,重写compareTo方法,一般用于java对提供的API对象进行排序(String,Date,Integer等)
         * 自定义排序(Collections.sort(list,比较器));对list集合中的对象没有限制,必须提供“比较器”对象,sort会利用比较器进行比较大小进行排序,用途广泛:可以进行任意数据比较
         */
        List<String> list=new ArrayList();
        list.add("Aange");
        list.add("erge");
        list.add("dage");
        Collections.sort(list);
        System.out.println(list);
        //sort方法是如何比较两个字符串大小的
        //Aange 比 dage小?
        //String类型提供比较字符串大小的方法
        //compare 比较 to 与xxx比较
        //compareTo 返回三种状态:>0  <0  ==0
        //n>0表示第一个数大
        //n<0表示第一个数小
        //n=0表示相等  compareTo比较值为0时equals为true
        int n="Aange".compareTo("dage");
        System.out.println(n);//-35<0

        List<Cat> list1=new ArrayList<Cat>();
        list1.add(new Cat(9));
        list1.add(new Cat(15));
        list1.add(new Cat(30));
        list1.add(new Cat(13));
        Collections.sort(list1,new ByAge());//按自定义比较
        /**输出比较结果**/
        for(int i=0;i<list1.size();i++) {
            System.out.println(list1.get(i).age);
        }
    }
}
/**
 * 自定义比较器 Comparator
 *
 */
class ByAge implements Comparator<Cat> {
    //自定义比较算法:按照猫对象的年龄比较大小
    //返回>0则o1>02;返回<0则o1<o2;返回=0,o1=o2
    @Override
    public int compare(Cat o1, Cat o2) {
        return o1.age-o2.age;
    }


}
//自然排序
class Cat implements Comparable<Cat>{
    int age;

    public Cat(int age) {
        super();
        this.age = age;
    }

    @Override
    public int compareTo(Cat o) {

        return this.age-o.age;//升序
    }

}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰河家园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值