Java自带排序方法

Collections.sort(List<T> list)
该方法是升序排序,方法的内部采用了快排实现,但该方法是 稳定的
Integer、Float、Double、String等Java自带类型外,list里的所有元素必须实现 Comparable接口的compareTo方法。
例子:

class Bean implements Comparable<Bean>{

      public String id;

      publicintage;

      public Bean(String id,int age){

         this.id = id;

         this.age = age;

      }

      /*

       先按id排序,再按age排序,这里都是从小到大排序(升序),值得注意的是,返回0与返回小于0的作用是不同的:

       返回大于0则希望this排在bean的后面,返回小于0则希望this排在bean前面,返回0则希望两者相对位置不变

       */

      @Override

      publicint compareTo(Bean bean) {

         int idc = this.id.compareTo(bean.id);

         if(idc==0)

            returnthis.age-bean.age;

         else

            return idc;

      }

   }

publicclass Test {

       publicstaticvoid main(String[]args){

          List<Bean> list = new ArrayList<Bean>();

          list.add(new Bean("b", 2));

          list.add(new Bean("a", 3));

          list.add(new Bean("b", 1));

          list.add(new Bean("a", 1));

          list.add(new Bean("a", 2));

          Collections.sort(list);

          for(Bean bean:list)

             System.out.println(bean.id+":"+bean.age);

       }

   }



Collections.sort(List<T> list,Comparator<? super T> c)
根据自定义的comparator进行排序,自定义的comparator要实现Comparator的compare方法
例子:

class Student {

   public String name;

   publicintage;

   public Student(String name,int age){

      this.name = name;

      this.age = age;

   }

}

class MyComparator implements Comparator<Student>{

   @Override

   publicint compare(Student s1, Student s2) {

      /*

       先比较age,如果age相等再进一步比较name,以此类推,这里采用降序排序,即从大到小。

       返回大于0,则希望s1排在s2的后面,返回小于0,则希望s1排在s2前面,返回0s1s2两者相对位置不变

       */

      if(s1.age == s2.age)

         return s2.name.compareTo(s1.name);

      else

         return s2.age-s1.age;

   }

}

publicclass Test {

    publicstaticvoid main(String[]args){

        List<Student> list = new ArrayList<Student>();

        list.add(new Student("a", 5));

        list.add(new Student("b", 4));

        list.add(new Student("b", 5));

        list.add(new Student("c", 1));

        list.add(new Student("a", 3));

        MyComparator myComparator = new MyComparator(); //自己的排序规则

        Collections.sort(list, myComparator); //根据自己定义的排序规则对List排序

        for(Student student:list)

           System.out.println(student.name+":"+student.age);

    }

}


Arrays.sort(T[ ] array)
Collections.sort(List<T> list)类似,前者对List类型排序,后者对数组排序。如果T是基本类型,如int、long、float等,内部采用的是快排实现,如果是封装类,则内部使用的归并排序。

Arrays.sort(T[ ] a, int fromIndex, int toIndex)
与上面不同在于该方法指定了只对数组的哪一部分排序


Arrays.sort(T[ ] a, Comparator<? super T> c)
Collections.sort(List<T> list,Comparator<? super T> c)类似,前者对List类型排序,后者对数组排序。

Arrays.sort(T[ ] a, Comparator<? super T> c, int fromIndex, int toIndex)
与上面不同在于该方法指定了只对数组的哪一部分排序

Array.sort(xxx)内部也是采用快排实现的。














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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值