zoukankan      html  css  js  c++  java
  • Java集合中List的Sort()方法进行排序

      

     这里讲的Sort()[进行升序的排序]方法是 java.util.Collections中的一个静态的方法,这里面需要知道他的两个不同参数的方法 ,当然要进行排序,就说明添加的对象是可以进行比较的。如果基本数据类型的包装类和String类型都是已经实现Comparable的接口,所以可以不需要任何的操作,进行默认的比较

     第一个方法:

    Sort

    public static <T extends Comparable<? super T>> coid sort(List<T> list) 其实他的参数就是一个集合,他的泛型对象实现了Comparable的接口,实现了里面的compareTo的抽象方法,他的返回值是一个int类型,如果返回值为0则两个对象是相等的,大于0,则对象一比对象二大,反之。

              public int compareTo(Student o) {
                // TODO Auto-generated method stub
                  return 0;
                  }

      第二个方法:

    Sort

      public static <T> void sort(List<T> list,Comparator<? super T> c)这里有两个参数,第一个就是一个集合对象,而第二个是一个实现了Comparator的接口,他的实现的抽象方法是,他的返回值是一个int类型,如果返回值为0则两个对象是相等的,大于0,则对象一比对象二大,反之。                        

              public int compare(Student o1, Student o2) {
                // TODO Auto-generated method stub
                 return 0;
                  }

      比较这两个不同参数的方法,可以看出出现了两个不同的接口,这两个接口有什么区别呢
      a.Comparable的接口---------默认的比较规则
    <1>实现该接口表示这个类的实例可以比较大小,可以进行自然的排序

    <2>定义了默认的比较规则

    <3>其实现类需要实现CompareTo()的方法

    <4>CompareTon()的方法返回正数表示大,负数表示小,0表示相等

      b.Comparator接口-----------临时的比较规则

    <1>用于定义临时的比较规则,而不是默认的比较规则

    <2>其实现类需要实现compara()方法

    <3>ComparatorComparable都是Java集合框架的成员

       接下来就讲解List的三种排序,第一种是int等基本数据类型的排序,第二种String类型的排序,第三种是一个普通类的排序,我把第一种和第二种结合的来说,因为他们的类或者包装类都实现了Comparable的接口,重写了方法,所以他们有默认的比较规则即(①首先是数字0-9 ②然后是大写的字母A-Z ③最后是小写字母a-z)

     /**
    
     * 1.List<Integer>添加10个重复的整数
    
     * 泛型不能是基本类型,必须是基本类型的包装类才可以
    
     * @param args
    
     */
    
    public void sortTest() {
    
    List<Integer> list=new ArrayList<Integer>();
    
        Random random=new Random();
    
        int k;
    
        /**
    
         * 添加不重复的10位随机数
    
         */
    
    for(int i=0;i<10;i++) {
    
    do {
    
    k=random.nextInt(100);
    
    }while(list.contains(k));
    
    list.add(k);
    
    System.out.println("成功添加整数"+k);
    
    }
    
    System.out.println("--------------------排序前-----------------------");
    
    for (Integer integer : list) {
    
    System.out.println("整数为"+integer);
    
    }
    
    Collections.sort(list);
    
    System.out.println("--------------------排序后-----------------------");
    
    for (Integer integer : list) {
    
    System.out.println("整数为"+integer);
    
    }
    
    }
    
     /**
    
     * 泛型为String的list的排序
    
     * @param args
    
     */
    
     public void sortTest02() {
    
    List<String> list=new ArrayList<String>();
    
    list.add("mir");
    
    list.add("google");
    
    list.add("android");
    
    System.out.println("-------------------排序前-------------------");
    
    for (String string : list) {
    
    System.out.println("字符串为"+string);
    
    }
    
    Collections.sort(list);
    
    System.out.println("---------------------排序后------------------");
    
    for (String string : list) {
    
    System.out.println("字符串为"+string);
    
    }
    
    }

     第三种也是我们主要讲的一种,以为我们需要比较一些类,比如学生类,就需要可能比较学生的身高,或者ID好,或者姓名。。。。。这里有两种方法,

    第一种就是将要进行比较的类,让其实现Comparable的接口,重写ComparaTo()的方法,在里面写入比较的准则。

    //比较学生的ID

    @Override

    public int compareTo(Student o) {

    // TODO Auto-generated method stub

    return this.id.compareTo(o.id);

    }

    而第二种就是创建一个实现Comparator接口的类,重写方法,然后调用我们前面说的有两个参数的Sort()方法,

    public class StudentComparator implements Comparator<Student> {

    @Override

    public int compare(Student o1, Student o2) {

    // TODO Auto-generated method stub

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

    }

    }

    以下是代码:

    List<Student> list=new ArrayList<Student>();
    
    list.add(new Student("2","kang"));
    
    list.add(new Student("1","chen"));
    
    list.add(new Student("3","abc"));
    
    System.out.println("------------排序前--------------");
    
    for (Student student : list) {
    
    System.out.println("学生的ID"+student.getId()+": 学生的姓名"+student.getName());
    
    }
    
    Collections.sort(list);
    
    System.out.println("------------排序后--------------");
    
    for (Student student : list) {
    
    System.out.println("学生的ID"+student.getId()+": 学生的姓名"+student.getName());
    
    }
    
    System.out.println("-------------以姓名进行排序-----");
    
    Collections.sort(list,new StudentComparator());
    
    for (Student student : list) {
    
    System.out.println("学生的ID"+student.getId()+": 学生的姓名"+student.getName());
    
    }
  • 相关阅读:
    2018年7月10日笔记
    2018年7月7日笔记
    2018年7月5日笔记
    2018年7月3日笔记
    sed 命令详解
    《软件构架实践》阅读笔记01
    《掌握需求过程》阅读笔记06
    《掌握需求过程》阅读笔记05
    第十二周进度条
    《掌握需求过程》阅读笔记04
  • 原文地址:https://www.cnblogs.com/dukc/p/4755444.html
Copyright © 2011-2022 走看看