Java内置排序

一、数组排序

1.1 一维数组排序

使用Arrays.sort()来排序。
Arrays.sort(int[] a) ;排序数组a
Arrays.sort(int[] a, int l, int r) ;对从索引l -> r-1的数组a排序;
Arrays.sort(T[] a, Comparator<? Super T> c) ;用Comparator接口实现自定义排序规则

import java.util.*;
public class Sort {
    public static void main(String[] str){
        Integer[] arr=new Integer[]{3,1,5,4,8,6,9,0,23,54,76};
        Arrays.sort(arr,0,5); //排序前四个
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println("");

        Arrays.sort(arr);
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println("");
        //Arrays.sort(arr, Collections.reverseOrder()); //逆序输出,和下面相同
        Arrays.sort(arr, new Comparator<Integer>() {
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        }); //从大到小排序,需用Integer来声明数组,外部比较器这在下面总结

        for(int i : arr){
            System.out.print(i+" ");
        }
    }
}
运行结果:
1 3 4 5 8 6 9 0 23 54 76
0 1 3 4 5 6 8 9 23 54 76
76 54 23 9 8 6 5 4 3 1 0

1.2二维数组排序

1.2.1 比较器

Comparable内部比较器

是一个接口,可以用于实现类的对象之间的自然排序。
要使用Comparable接口,需要实现它的compareTo方法,该方法接受一个类型为T的对象作为参数,返回一个整数值。这个返回值指示了当前对象和参数对象的大小关系,如果返回值为负数,则表示当前对象小于参数对象;如果返回值为0,则表示两个对象相等;如果返回值为正数,则表示当前对象大于参数对象。

public class Person implements Comparable<Person>{
    private int age;
    //构造方法
    public Person(int age){
        this.age = age;
    }
    //实现compareTo方法
    public int compareTo(Person p){
        return this.age - p.age;
    }
}

在上面的例子中,compareTo方法比较两个Person对象的年龄属性,并返回一个整数值,指示了它们的大小关系。如果返回值为负数,则第一个对象小于第二个对象;如果返回值为0,则两个对象相等;如果返回值为正数,则第一个对象大于第二个对象。

使用内部比较器的好处是可以直接使用Java集合框架提供的排序函数Collections.sort()或Arrays.sort()来对对象集合进行排序,而不需要手动实现排序算法。例如,下面的代码将对一个Person对象的列表进行排序:

List<Person> people = new ArrayList<Person>();
people.add(new Person(30));
people.add(new Person(20));
people.add(new Person(40));
Collections.sort(people);

在上面的代码中,通过调用Collections.sort()方法对Person对象的列表进行排序,由于Person类实现了Comparable接口,因此可以直接使用该方法进行排序。排序结果将按照年龄升序排列。

Comparator,外部比较器

Comparator是Java中的外部比较器,用于比较对象之间的相对顺序。和Comparable接口不同,它不是定义在类中的,而是通过实现Comparator接口来创建比较器。

Comparator接口定义了一个compare方法,该方法接受两个类型为T的对象作为参数,返回一个整数值。和Comparable接口的compareTo方法类似,这个返回值指示了第一个对象和第二个对象的大小关系,如果返回值为负数,则第一个对象小于第二个对象;如果返回值为0,则两个对象相等;如果返回值为正数,则第一个对象大于第二个对象。

//对数组arr进行逆序排列
        Arrays.sort(arr, new Comparator<Integer>() {
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });

1.2.2 lambda表达式

Lambda表达式是Java 8中引入的一个新特性,它使得编写简洁、可读性高的代码更加容易。Lambda表达式本质上是一种匿名函数,它可以作为参数传递给方法,或者赋值给变量。

Lambda表达式的语法如下:

(parameters) -> expression

其中,参数列表指定了函数接受的参数,箭头"->"将参数列表和表达式分开,表达式指定了函数执行的操作。

2.二维数组排序

按行排序:

import java.util.Arrays;
public class Sort {
    public static void main(String[] args) {
        // 初始化二维数组
        int[][] arr = {{3, 2, 1}, {6, 7, 5}, {19, 8, 7}};
        // 对二维数组每行进行排序
        for (int i = 0; i < arr.length; i++) {
            Arrays.sort(arr[i]);
        }
        // 打印排序后的二维数组
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

二、列表排序

Collections.sort()是Java中的一个静态方法,用于对实现了List接口的对象进行排序。它可以处理List集合中的元素,包括基本数据类型和对象。Collections.sort()方法使用TimSort算法,具有较高的性能。

import java.util.ArrayList;
import java.util.*;
public class Sort {
    public static class People{
        String name="";
        Integer age;
        public People(String name,int age){
            this.name=name;
            this.age=age;
        }
    }
    public static void main(String[] args) { 
        ArrayList<Integer> list=new ArrayList<>();
        list.add(3);
        list.add(1);
        list.add(5); 
        list.add(9);
        list.add(2);
        list.add(4); 
        Collections.sort(list);
        System.out.println(list.toString());
        ArrayList<People> plist=new ArrayList<>();//people类列表
        plist.add(new People("lisi", 23));
        plist.add(new People("zhan", 18));
        plist.add(new People("wang", 20));
        Collections.sort(plist,(p1,p2)->p1.age-p2.age);//从小到大排序
        for (People p : plist){
            System.out.println(p.age+" ");
        }
    }
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇