美文网首页
java 数组和list排序

java 数组和list排序

作者: 岳麓山鸡王 | 来源:发表于2020-04-17 14:10 被阅读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

相关文章

  • 知识总结:Java集合对象排序

    1.List排序 这个和数组的排序又不一样了。 其实Java针对数组和List的排序都有实现,对数组而言,你可以直...

  • java 数组和list排序

    数组排序 其中有数组排序和数组对象排序 数组一些数字排序则直接用Arrays.sort()加数组就可以。数组对象则...

  • Java排序

    数组排序 list排序 compareTo大小判断 Comparable排序 Comparator排序

  • Arrays

    描述 Arrays是java提供的数组操作工具类 排序 下面demo展示基本类型数组转list、comparato...

  • 综合一

    一 Core Java:(P6级必问其中3题以上) 1. 整数数组按绝对值排序 List list = (...

  • python技巧积累

    数组逐行替换 生成多维数组,元素随机 dict按照key排序生成list、dict按照value排序生成list 链接

  • java 快速排序

    快速排序 采用了数组排序和 list集合排序 两种方式,其中 以num 来排序处理。

  • scala 2.13.1 数组 和Java List互转

    Scala数组 转 Java List List 转 Scala数组

  • 集合

    List 将String数组添加到List: sort排序 降序: 升序: 转换 list转Array 数组转集合...

  • Java 排序

    概述 ​对Java对数组对象进行排序,Java对排序问题的处理。Java排序一般包括基础排序和Lambda Com...

网友评论

      本文标题:java 数组和list排序

      本文链接:https://www.haomeiwen.com/subject/zhgevhtx.html