java 数组和list排序

2020-04-17  本文已影响0人  岳麓山鸡王

数组排序

其中有数组排序和数组对象排序

数组一些数字排序则直接用Arrays.sort()加数组就可以。
数组对象则和list对象排序一样,实现接口,再用Arrays.sort()去排序。

其中,列表排序也是转成array排序后搞的,源代码中有

列表排序

对象排序

对象是学生,年龄和名字

class Student {
    String name;
    int age;

    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
}

一种是类实现Comparable接口

这种方法是类里面进行了排序的说明,结果如代码里的正序

实现原理:

另一种是实现Comparator接口

结果如代码里的倒序
这是在排序对象的时候调用了Comparable,使用了一个匿名内部类

public static <T> void sort(List<T> list, Comparator<? super T> c) {
        list.sort(c);
    }
//以下是list 排序
default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c); //相当于实现了比较后用数组排序
        ListIterator<E> i = this.listIterator(); //遍历重新生成
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
    }


代码

package standard;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class CompareUtil {

    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("zt", 12));
        students.add(new Student("lw", 20));
        students.add(new Student("zz", 6));
        for (Student student : students) {
            System.out.println(student.toString());
        }

        Collections.sort(students);
        System.out.println("\n=====正序======");
        for (Student student : students) {
            System.out.println(student.toString());
        }
        

        Collections.sort(students, new Comparator<Student>() {

            @Override
            public int compare(Student o1, Student o2) {
                // TODO Auto-generated method stub
                return o1.age > o2.age ? -1 : 1;
            }
            
        });
        
        System.out.println("\n=====倒序======");
        for (Student student : students) {
            System.out.println(student.toString());
        }
        
    }

}

class Student implements Comparable<Student> {

    String name;
    int age;
    
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }


    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }

    @Override
    public int compareTo(Student o) {
        // TODO Auto-generated method stub
        return this.age > o.age ? 1 : -1;
    }

}


/**
 * 
 * Student [name=zt, age=12]
 *Student [name=lw, age=20]
 *Student [name=zz, age=6]
 *
 *=====正序======
 *Student [name=zz, age=6]
 *Student [name=zt, age=12]
 *Student [name=lw, age=20]
 *
 *=====倒序======
 *Student [name=lw, age=20]
 *Student [name=zt, age=12]
 *Student [name=zz, age=6]
 *
 */



reference

https://www.jianshu.com/p/9d1659e1fdb1
https://www.jianshu.com/p/57ec4df42924

上一篇 下一篇

猜你喜欢

热点阅读