Java中自带的排序算法Arrays.sort()和Collections.sort()

  1.       如果我们需要对一个基本类型数组进行排序,我们可以使用Arrays.sort()方法,不过只能升序;

  2.       如果我们需要排序一个对象列表List,我们可以使用Collection.sort()方法或者ArrayList自带的sort方法;

   Arrays.sort()和Collections.sort()都提供自然升序,但是如果想要升序(也可以降序)就需要使用对应的类实现Comparator接口重写compare方法

 

  • Arrays.sort(基本类型数组)-------从小到大

  • Arrays.sort(int[] a, int fromIndex, int toIndex)-------对部分数组从小到大排序

  • public static <T> void sort(T[] a, Comparator<? super T> c)-------从大到小排序,适应引用类型

public class Test {

    public static void main(String[] args) {

         Integer[] arr = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};

         Arrays.sort(arr, new MyComparator());        
        

         for(int i = 0; i < arr.length; i ++) {

             System.out.print(arr[i] );

         }

     }

 }





 class MyComparator implements Comparator<Integer>{

     @Override

     public int compare(Integer o1, Integer o2) {

         return o1-o2;//降序:9876543210

        //return o2-o1;升序:0123456789

     }

 }



 

  • Collections.sort(List<T> list) 对简单的泛型排序

List<String> lists = new ArrayList<String>();

        lists.add("1");

        lists.add("6");

        lists.add("3");

 

  • Collections.sort(List<T> list, Comparator<? super T> c)

public class TestA implements Comparator<TestA >{



    private static final long serialVersionUID = -8968350748602548887L;



    private String name;



    //变量类型必须要为int的封装类型,因为只有是封装类型才可以调用Integer的方法

    private Integer order;



    public String getName() {

        return name;

}

….

@Override

            public int compare(TestA o1, TestA o2) {

                //升序

                return o1.getOrder().compareTo(o2.getOrder());

            }

}



public class Test {



    private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);



    public static void main(String[] args) {

        List<TestA> listA = new ArrayList<TestA>();

        //TestA 即是上面类

        TestA a1 = new TestA();

        a1.setName("张三");

        a1.setOrder(1);

        listA.add(a1);

        TestA a5 = new TestA();

        a5.setName("王屋");

        a5.setOrder(5);

        listA.add(a5);

        TestA a3 = new TestA();

        a3.setName("刘六");

        a3.setOrder(3);

        listA.add(a3);

Collection.sort(listA,new TestA());

//也可以这么干,TestA里不实现Comparator接口排序,在真正调用sort时再排序,如下:

Collections.sort(listA, new Comparator<TestA>() {

            @Override

            public int compare(TestA o1, TestA o2) {

                //升序

                return o1.getOrder().compareTo(o2.getOrder());

            }

        });

//ArrayList自身在JDK1.8也增加了sort方法

listA.sort(new Comparator<TestA>() {

                     public int compare(TestA o1, TestA o2) {

                                      //升序

                       return o1.getOrder().compareTo(o2.getOrder());

            }

                            }

                       

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值